[英]Why aren't my labels showing up?
我创建了一个控件,该控件由一组标签组成,这些标签可以监听触摸事件(以选择其中一个;即“ SelectList”)。 当我将此控件嵌入到我的页面中时,一切正常。
但是,我正在创建一个控件,该控件充当任何其他视图/控件的容器,并使用Alpha遮罩隐藏它的一部分。 当我将SelectList放入此容器时,除了标签全部不可见之外,其他所有内容均应按原样显示! 事实证明,它们的宽度和高度从未设置(两者都保持为-1)。
现在,它的工作方式是SelectList是一个RelativeLayout,其中包含带有标签的StackLayout。 容器是一个具有内容内容属性句柄的View,然后自定义渲染器使用我在网上找到的一些扩展方法片段将其转换为本地UIView后将其屏蔽:
public static UIView ConvertToNative(this View view, CGRect size)
{
var renderer = Platform.CreateRenderer(view);
renderer.NativeView.Frame = size;
renderer.Element.Layout(size.ToRectangle());
renderer.NativeView.SetNeedsLayout();
return renderer.NativeView;
}
无论我做什么,标签都不会分配大小(我已经在SizeChanged事件以及很多无关的地方尝试过Layout / ForceLayout)。 手动设置宽度和高度请求的确会使标签显示出来,但这似乎是一种技巧,而不是适当的解决方案。
编辑:我也认为值得一提的是,包含标签的StackLayout的大小确实是正常的。 另外,由于样式限制,在这种情况下也不可以使用ListView。
如下更改您的PopupView:
public class PopupView : ContentView
{
//public readonly View Content;
public PopupView(View content)
{
if (content == default(View))
{
throw new ArgumentNullException(nameof(content));
}
Content = content;
}
}
我还移动了您的框,因为它显示在标签顶部。 添加标签后添加。
private void Test3()
{
var selectList = GenerateSimpleSelectList();
var boxView = new BoxView() { Color = Color.Purple };
selectList.Children.Add(boxView,
Constraint.RelativeToParent((p) => { return p.X + 200; }),
Constraint.RelativeToParent((p) => { return p.Y + 200; }),
Constraint.RelativeToParent((p) => { return p.Width - 200; }),
Constraint.RelativeToParent((p) => { return p.Height - 200; }));
var popupView = new PopupView(selectList);
this.Content = popupView;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.