c# - 动态添加 TabItems

标签 c# wpf xaml data-binding tabcontrol

我有一个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/

相关文章:

wpf - slider 不适用于触摸输入

服务器的 C# GC

c# - 寻找使用评估引擎构建 "TestMaker"(问题和响应)应用程序的技巧

c# - Angular 2,C# MVC ApiController : Error on Get Request from C# Rest Api

c# - 在 XAML 中,d : (design time) 的反义词是什么

wpf - 如何在没有扩展器的情况下对数据网格进行分组

c# - 如何遍历 ChartColorPalette 属性并添加到列表?

c# - WPF如何让拖放与控制键一起使用?

c# - 处理 WPF 中的无效图像源

c# - Windows Phone 8.1 如何以编程方式创建具有指定模板的磁贴