如果我有一個名爲GuiObject的類,並且該類有一個名爲「GuiObjects」的GuiObjects列表。在tabControl中爲TabItems使用數據模板
現在說我的窗口有GuiObjects,這是我在的.xaml文件中使用數據綁定到列表:
<StackPanel>
<ItemsControl ItemsSource="{Binding TopObjectList}" DataTemplateSelector="{DynamicResource templateSelector"/>
</StackPanel>
我可以做一個DataTemplate對每種類型的FrameworkElement的我想生成,但我對於TabControl有問題。我可以爲TabControl的,像這樣創建一個DataTemplate:
<DataTemplate x:key="TabControlTemplate" DataTemplateSelector="{DynamicResource templateSelector" >
<TabControl ItemsSource="{Binding GuiObjects}" />
</DataTemplate>
,其結果是有存在的每種適當的頁面的標籤控制,但沒有單獨的TabItems的內容。很公平,我只是爲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的內容中綁定「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>
此外,該解決方案具有層次問題:當我說:{結合GuiObjets}我指的TabItems的列表,而不是每個TabItem的內FrameworkElements名單。
該解決方案要麼爲TabControl和TabItem使用單獨的DataTemplates,而只是修復它,以便DataTemplateSelector實際上爲TabItems工作(不知道如何執行此操作)。或者使用ItemContainerStyle,並以某種方式告訴它在綁定GuiObjects時下一層。有人知道怎麼做嗎?
['DataTemplate'](http://msdn.microsoft.com/zh-cn/library/system.windows.datatemplate%28v=vs.110%29.aspx)沒有'DataTemplateSelector'屬性,所以我想知道如何在第二個代碼示例中爲其分配一個值。 –