2

Я пытаюсь отображать иерархические данные с помощью TreeView, и я хотел бы установить различные DataTemplates для разных типов детей.TreeView HierarchicalDataTemplate не применяется ItemContainerStyle

Но дело в том, что мой стиль не применяется.

Возможно, это очень простая ошибка, но я ее действительно не нахожу.

<TreeView ItemsSource="{Binding List}"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local:Main}" ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Property1}"/> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type local:Type2}"> 
      <HierarchicalDataTemplate.ItemContainerStyle> 
       <Style TargetType="TreeViewItem"> 
        <Setter Property="IsExpanded" Value="True"/> 
       </Style> 
      </HierarchicalDataTemplate.ItemContainerStyle> 
      <TextBlock Text="{Binding Property2}"/> 
     </HierarchicalDataTemplate> 
     <HierarchicalDataTemplate DataType="{x:Type local:Type3}"> 
      <HierarchicalDataTemplate.ItemContainerStyle> 
       <Style TargetType="TreeViewItem"> 
        <Setter Property="IsExpanded" Value="False"/> 
       </Style> 
      </HierarchicalDataTemplate.ItemContainerStyle> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 
+0

Первоначальная мысль - должен TargetType не быть "{x: Тип TreeViewItem}" – user3690202

+0

Вторая мысль - есть опечатка в "IsExpaned" - она ​​должна быть "IsExpanded" - обратите внимание на второй D – user3690202

+0

Спасибо за ответ, но оба не помогает. – MisterPresident

ответ

3

Хорошо, я знаю, что происходит не так. HierarchicalDataTemplate.ItemContainerStyle содержит стиль, который применяется к ItemsContainer, где хранятся дочерние элементы для текущего узла. Попробуйте это как эксперимент, изменить свой стиль:

<HierarchicalDataTemplate.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="IsExpanded" Value="True" /> 
      <Setter Property="Foreground" Value="Navy" /> 
     </Style> 
    </HierarchicalDataTemplate.ItemContainerStyle> 

Вы заметите, что узел, который вы кладете этот стиль на по-прежнему имеет черный цвет переднего плана, но все это детей теперь будет иметь передний план военно-морской флот ,

Это немного контр-интуитивно, но когда вы думаете об этом, я думаю, это имеет смысл. Поэтому, имея в виду это, я считаю, что лучшим решением является привязка IsExpanded для всех TreeViewItems к переменной в VM, а затем выбор различных значений на основе типов там.

+0

Большое спасибо! – MisterPresident

0

У меня была аналогичная проблема. В случае, если Main, Type2 и Type3 являются интерфейсами, выбор в XAML не будет работать, мне пришлось использовать классы. Если вы хотите использовать интерфейсы, вы можете реализовать селектор шаблонов.

+0

Благодарим вас за ответ, но они не являются интерфейсами. – MisterPresident

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