【问题标题】:Xamarin children not being added未添加 Xamarin 儿童
【发布时间】:2015-03-30 19:21:46
【问题描述】:

我有这个烦人的问题,我不知道如何解决。

在 Xamarin Forms 中,我正在尝试绘制一个动态布局,为此我加载了一个元素列表(这可行)。现在我正在尝试显示它的标签,所以我遍历所有项目并为每个项目添加一个标签。问题是页面保持空白。

是的,我将 _layout 变量初始化为 StackLayout,还制作了 ScrollView,然后将滚动视图的内容设置为 _layout 变量。但我的页面仍然是空的。我无法分享实际代码,但我使用不同的名称重写了它。

    private void DrawItems()
    {
        var items = (List<Item>)_database.GetItems();
        foreach(var item in items)
        {
            DrawItem(item);
        }
    }

    private void DrawItem(Item item)
    {
        AddLabel(item);
    }

    private void AddLabel(Item item)
    {
        if (string.IsNullOrEmpty(item.Text)) return;
        var label = new Label
        {
            Text = (!string.IsNullOrEmpty(item.Number)) ? string.Format("{0}: {1}", item.Number, item.Text) : item.Text,
            FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label))
        };

        _layout.Children.Add(label);
    }

由于某些奇怪的原因,当我开始调试(在 var label 上打断 ...)时,标签 get 已创建,但当我在 _layout.Children.Add(label) 上打断时,它永远不会被调用。

【问题讨论】:

  • 如果你的断点没有被命中,那么它通常表明旧的 bin 在清理过程中没有被删除。确保在清理工件时删除所有垃圾箱,然后重试

标签: xamarin xamarin.forms


【解决方案1】:

当改变 UI 元素时,你需要在主线程上做。

试试这个:

Device.BeginInvokeOnMainThread(() =>
{
    _layout.Children.Add(label);
}

我尝试了以下代码,它对我有用。我正在使用 Xamarin.Forms 1.4.0.6341

public class MyPage : ContentPage
{
    StackLayout stack;

    public MyPage()
    {
        var scroll = new ScrollView();
        stack = new StackLayout();

        var btn = new Button {Text = "Add Label"};
        btn.Clicked += (sender, args) => stack.Children.Add(new Label {Text = "Test"});
        stack.Children.Add(btn);

        AddLabelEverySecond();

        scroll.Content = stack;
        Content = scroll;
    }

    private async void AddLabelEverySecond()
    {
        for (var i = 0; i < 10; i++)
        {
            await Task.Delay(1000);
            stack.Children.Add(new Label { Text = "1 second" });
        }
    }
}

这适用于您的代码吗?或许你可以告诉我们DrawItems 是从哪里调用的?

【讨论】:

  • 试过了,还是没有变化
  • 我更新了我的答案。也许你可以使用一些东西
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多