2017-01-22 4 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

Смежные вопросы