【发布时间】:2016-12-12 13:28:10
【问题描述】:
我创建了一个控件,该控件由一组标签组成,这些标签监听触摸事件(选择其中一个;“SelectList”)。当我将此控件嵌入到我的一个页面中时,一切正常。
但是,我正在创建一个控件,该控件用作任何其他视图/控件的容器,并使用 alpha 掩码来隐藏它的一部分。 当我把我的 SelectList 放在这个容器中时,除了标签都是不可见的之外,一切都完全按照它应该出现的方式出现!事实证明,它们的宽度和高度从未设置过(都保持在 -1)。
它现在的工作方式是 SelectList 是一个包含带有标签的 StackLayout 的 RelativeLayout。容器是一个视图,带有内容的属性句柄,然后自定义渲染器使用我在网上找到的一个小扩展方法 sn-p 将其转换为原生 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 并且在很多不相关的地方也可以肯定)。手动设置宽度和高度请求确实会显示标签,但这似乎是一种 hack 而不是正确的解决方案。
编辑:我还认为值得一提的是,包含标签的 StackLayout 的大小似乎是正常的。此外,由于样式限制,在这种情况下不能选择使用 ListView。
【问题讨论】:
-
解决方案过于复杂,无法快速创建和重现。如果您发布完整的示例解决方案,有人可能会提供更多帮助
-
我现在创建了一个示例解决方案,我在其中重现了该错误。可以在这里找到:github.com/PhilipMR/XamarinSnippets
标签: c# ios forms mobile xamarin