我在ContentPage的xaml中的ResourceDictionary中具有以下标签:
<ContentPage.Resources>
<ResourceDictionary>
<Label Text="I am label" x:Name="label" x:Key="label"/>
</ResourceDictionary>
</ContentPaget.Resources>
在我后面的代码中,我单击了以下事件处理程序:
void Handle_Clicked(object sender, System.EventArgs e)
{
DataTemplate dataTemplate = new DataTemplate(() => label);
for (int i = 0; i < 3; i ++)
{
Label content = (Label) dataTemplate.CreateContent();
stack.Children.Add(content);
}
}
在我称为Stack的StackLayout中-按下分配给Handle_Clicked的按钮时,仅添加1个标签。为什么只添加1个标签-应该添加3个标签?
答案 0 :(得分:0)
我怀疑所有控件都需要唯一的ID。由于这也不起作用:
void Handle_Clicked(object sender, System.EventArgs e)
{
for (int i = 0; i < 3; i ++)
{
stack.Children.Add(label);
}
}
这使我首先尝试使用DataTemplate
。意味着同一对象只能添加到视图一次。
还应注意createContent()
有用-但仅当它在xaml中定义(不在后面的代码中实例化)时:
<ContentPage.Resources>
<ResourceDictionary>
<DataTemplate x:Name="dataTemplate" x:Key="dataTemplate">
<Label Text="I am label"/>
</DataTemplate>
</ResourceDictionary>
</ContentPaget.Resources>
我发现的解决方法是在添加对象之前先摆脱DataTemplate和clone对象:
void Handle_Clicked(object sender, System.EventArgs e)
{
for (int i = 0; i < 3; i ++)
{
var l = FastDeepCloner.DeepCloner.Clone(label);
stack.Children.Add(l);
}
}