在tabControl中为TabItem使用datatemplate

Nic*_*rno 1 wpf tabcontrol datatemplate tabitem

如果我有一个名为GuiObject的类,那个类有一个名为GuiObjects的GuiObjects列表:"GuiObjects".

现在说我的窗口有一个GuiObjects列表,我在.xaml文件中使用dataBind到:

<StackPanel>
    <ItemsControl ItemsSource="{Binding TopObjectList}" DataTemplateSelector="{DynamicResource templateSelector"/> 
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

我可以为我想要生成的每种类型的FrameworkElement创建一个datatemplate,但是我遇到了TabControl的问题.我可以为tabControl创建一个datatemplate,如下所示:

<DataTemplate x:key="TabControlTemplate" DataTemplateSelector="{DynamicResource templateSelector" >
    <TabControl ItemsSource="{Binding GuiObjects}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

结果是一个选项卡控件,其中包含每个正确的页面,但没有单个TabItems的内容.很公平,我只会为TabItems制作一个DataTemplate.对于每个TabItem,我想将GuiObjects的内容放入stackpanel.

<DataTemplate x:key="TabItemTemplate" DataTemplateSelector="{Resource templateSelector">
    <TabItem Header = {Binding Title}>
        <StackPanel>
            <ItemsControl ItemsSource="{Binding GuiObjects}" DataTemplateSelector="{DynamicResource templateSelector"/> 
        </StackPanel>
    </TabItem>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

这里的问题是TabItemTemplate永远不会被调用.我尝试过在TabControlTemplate中设置ItemContainerStyle的解决方案,但后来我遇到了层次结构的问题.如果我在TabItem的内容中绑定"GuiObjects",我将绑定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>
Run Code Online (Sandbox Code Playgroud)

同样,这个解决方案有级别问题:当我说:{Binding GuiObjets}我指的是TabItems列表,而不是每个TabItem中的FrameworkElements列表.

解决方案是要么为TabControl和TabItem添加单独的DataTemplates,只需修复它,以便DataTemplateSelector实际上适用于TabItems(不知道如何做到这一点).或者使用ItemContainerStyle,并以某种方式告诉它在绑定GuiObjects时向下一级.有人知道怎么做吗?

O. *_*per 10

要为a 的页面内容提供模板TabControl,请使用以下属性:

ItemTemplate/ ItemTemplateSelector的性质TabControl来定义的标签标题是什么样子.