Xamarin的孩子没有加入

时间:2015-03-30 10:10:27

标签: xamarin xamarin.forms

我有这个恼人的问题而且我不知道如何解决这个问题。

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

是的我将_layout变量初始化为StackLayout并且我还创建了一个ScrollView,然后我将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标签上放一个中断......)标签得到了创建,但是当我在_layout.Children.Add(标签)上休息时,这永远不会得到调用。

1 个答案:

答案 0 :(得分:0)

更改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