未添加Xamarin儿童

未添加Xamarin儿童,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有一个恼人的问题,我不知道如何解决这个问题 在Xamarin表单中,我试图绘制一个动态布局,为此我加载一个元素列表(这很有效)。现在我试图显示它的标签,所以我循环遍历所有项目,并为每个项目添加一个标签。问题是页面保持为空 是的,我将_布局变量初始化为StackLayout,并创建了一个ScrollView,然后将ScrollView的内容设置为_布局变量。但我的页面仍然是空的。我无法共享实际代码,但我使用不同的名称重写了它 private void DrawItems() {

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

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

是的,我将_布局变量初始化为StackLayout,并创建了一个ScrollView,然后将ScrollView的内容设置为_布局变量。但我的页面仍然是空的。我无法共享实际代码,但我使用不同的名称重写了它

    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);
    }
private void DrawItems()
{
var items=(List)u database.GetItems();
foreach(项目中的var项目)
{
抽签项目(项目);
}
}
私人作废提款项目(项目)
{
添加标签(项目);
}
专用无效添加标签(项目)
{
if(string.IsNullOrEmpty(item.Text))返回;
变量标签=新标签
{
Text=(!string.IsNullOrEmpty(item.Number))?string.Format(“{0}:{1}”,item.Number,item.Text):item.Text,
FontSize=Device.GetNamedSize(NamedSize.Small,typeof(标签))
};
_布局。子项。添加(标签);
}

出于某种奇怪的原因,当我开始调试时(在var标签上加一个分隔符…),标签会被创建,但当我在_layout.Children.Add(标签)上加一个分隔符时,它就不会被调用。

更改UI元素时,需要在主线程上执行此操作

试试这个:

Device.beginInvokeMainThread(()=>
{
_布局。子项。添加(标签);
}

我试过下面的代码,它对我很有效。我使用的是Xamarin.Forms 1.4.0.6341

公共类MyPage:ContentPage
{
堆栈布局堆栈;
公共MyPage()
{
var scroll=new ScrollView();
stack=新的StackLayout();
var btn=新建按钮{Text=“添加标签”};
btn.Clicked+=(sender,args)=>stack.Children.Add(新标签{Text=“Test”});
stack.Children.Add(btn);
AddLabelEverySecond();
scroll.Content=stack;
内容=滚动;
}
私有异步void AddLabelEverySecond()
{
对于(变量i=0;i<10;i++)
{
等待任务。延迟(1000);
Add(新标签{Text=“1秒”});
}
}
}

这适用于您的代码吗?也许您可以告诉我们调用
DrawItems
的位置?

尝试了这一点,但仍然没有更改我更新了我的答案。如果您的断点未命中,则可能有一些东西可以使用,这通常是在清理过程中未删除的旧bin的标志。请确保在清理工件时s删除所有垃圾箱,然后重试