2017-01-22 38 views
0

我有一個TreeView控件,顯示不同的對象對象。我使用多個DataTemplates,每個類型一個,其DataType相應地設置。
代碼:在具有多個DataTemplates的樹視圖中,如何將樣式應用於其中的一個樣式

<TreeView> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local:Family}" ItemsSource = "Members"> 
      <!-- template omitted here--> 
     </HierarchicalDataTemplate> 
     <DataTemplate DataType = "{x:Type local:FamilyMember}"> 
      <!--template omitted--> 
     </DataTemplate> 
    </TreeView.Resources> 
</TreeView> 

現在我想將樣式應用到HierarchicalDataTemplate,只給它。我必須使用一種風格,因爲我設置了TreeViewItem的一些屬性,在這種情況下是項目容器。 我想:

<HierarchicalDataTemplate DataType="{x:Type local:Family}" ItemsSource = "Members"> 
    <HierarchicalDataTemplate.ItemsContainerStyle> 
     <Style TargetType = "TreeViewItem"> 
      <!-- some styling of the tree view item--> 
     </Style> 
    <\HierarchicalDataTemplate.ItemsContainerStyle> 
    <!-- template omitted here--> 
</HierarchicalDataTemplate> 

但風格被應用到所有樹項目,即使是那些呈現FamilyMember對象,它們是同一個模板的不是。
我該怎麼做?

回答

1

您可以使用ItemContainerStyleSelector屬性來控制哪些樣式適用於哪些項目。我在this answer中發現了一個示例用法,可以幫助您入門。與該示例的主要區別在於,您將根據對象的類型而不是對象的屬性來選擇。

+0

感謝您的回答,但有沒有辦法在普通的XAML中實現? – RoadBump

+0

我能想到的只有XAML。然而,如果你花了一些時間,你可以開發一個足夠通用的樣式選擇器類映射類型。然後,您可以在任何地方重複使用,並僅在XAML中完成工作。我從來沒有嘗試過。 – Xavier

+0

我試過了,它解決了這個問題。但是現在出於一個奇怪的原因,我在輸出窗口中遇到了很多綁定錯誤,並說'FamilyMember'沒有名稱爲'Members'的成員。似乎它試圖將'HierarchicalDataTemplate'應用於家庭成員,即使'DataType'設置爲'Family'。現在做什麼? – RoadBump

相關問題