如果我有一个名为:GuiObject 的类,并且该类有一个名为“GuiObjects”的 GuiObject 列表。
现在说我的窗口有一个 GuiObjects 列表,我在 .xaml 文件中使用它来数据绑定(bind)到:
<StackPanel>
<ItemsControl ItemsSource="{Binding TopObjectList}" DataTemplateSelector="{DynamicResource templateSelector"/>
</StackPanel>
我可以为我想要生成的每种类型的 FrameworkElement 创建一个数据模板,但我在使用 TabControl 时遇到了问题。我可以像这样为 tabControl 创建一个数据模板:
<DataTemplate x:key="TabControlTemplate" DataTemplateSelector="{DynamicResource templateSelector" >
<TabControl ItemsSource="{Binding GuiObjects}" />
</DataTemplate>
结果是一个选项卡控件,其中包含每个正确的页面,但没有各个 TabItem 的内容。很公平,我将为 TabItems 创建一个 DataTemplate。对于每个 TabItem,我想将 GuiObjects 的内容放入堆栈面板中。
<DataTemplate x:key="TabItemTemplate" DataTemplateSelector="{Resource templateSelector">
<TabItem Header = {Binding Title}>
<StackPanel>
<ItemsControl ItemsSource="{Binding GuiObjects}" DataTemplateSelector="{DynamicResource templateSelector"/>
</StackPanel>
</TabItem>
</DataTemplate>
这里的问题是 TabItemTemplate 永远不会被调用。我已经尝试过涉及在 TabControlTemplate 中设置 ItemContainerStyle 的解决方案,但后来我遇到了层次结构问题。如果我在 TabItem 的内容中绑定(bind)“GuiObjects”,我绑定(bind)的是 tabItems 列表,而不是每个 TabItem 中的列表。 (我想做第二个)。这是一个例子:
<DataTemplate x:key="TabControlTemplate" DataTemplateSelector="{DynamicResource templateSelector" >
<TabControl ItemsSource="{Binding GuiObjects}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Title}"/>
<Setter Property="Content" Value="<StackPanel><ItemsControl ItemsSource="{Binding GuiObjects}" DataTemplateSelector="{DynamicResource templateSelector"/></StackPanel>"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
</DataTemplate>
同样,此解决方案存在级别问题:当我说:{Binding GuiObjets} 我指的是 TabItems 列表,而不是每个 TabItem 中的 FrameworkElements 列表。
解决方案是坚持为 TabControl 和 TabItem 使用单独的 DataTemplates,然后修复它,以便 DataTemplateSelector 实际上适用于 TabItems(不知道如何做到这一点)。或者使用 ItemContainerStyle,并以某种方式告诉它在绑定(bind) GuiObjects 时下降一级。有人知道怎么做吗?
最佳答案
为 TabControl
的页面内容提供模板,使用以下属性:
ItemTemplate
/ItemTemplateSelector
TabControl
的属性用于定义选项卡标题的外观。
关于wpf - 在 tabControl 中为 TabItems 使用数据模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939660/