我有一个TabControl
控件
<TabControl Name="Farms_myVillages"
ItemsSource="{Binding Villages}">
</TabControl/>
在后面的代码中,我向 TabControl
动态添加了一些选项卡,如下所示:
foreach (Village vill in Villages)
{
TabItem tab = new TabItem();
tab.Header = vill.Name;
VillageUserControl c = new VillageUserControl();
c.DataContext = vill;
tab.Content = c;
Farms_myVillages.Items.Add(tab);
}
其中 VillageUserControl
是处理指定村庄的 UserControl
。这段代码工作正常,它得到了预期的结果......
问题是我不希望它在后面的代码中,而只是在 xaml
本身中。
我试试这个:
<TabControl Name="Farms_myVillages"
ItemsSource="{Binding Villages}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="Content">
<Setter.Value>
<u:VillageUserControl DataContext="{Binding}"/>
</Setter.Value>
</Setter>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
我运行后,它抛出一个异常:“指定的元素已经是另一个元素的逻辑子元素。先断开它。”
我错过了什么吗?请在这里帮助我...
最佳答案
你设置错了,你不应该修改ItemContainerStyle
但是TabControl.ItemTemplate
标题和 TabControl.ContentTemplate
内容。
(异常可能与以下事实有关:在样式中仅创建了一个 VillageUserControl
,但该样式适用于多个选项卡项。)
关于c# - 动态添加 TabItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720446/