【问题标题】:Why aren't my labels showing up?为什么我的标签不显示?
【发布时间】: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


【解决方案1】:

如下改变你的 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;
    }

【讨论】:

    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多