2012-02-02 4 views
2

Я пытаюсь изменить шаблон SelectedItem в TreeView. Я написал простой стиль контейнера и изменение элемента шаблона в Style.Triggers, как описаноТриггер TreeView.IsSelected не работает должным образом

[1]: How do I highlight a treeview selected item with some color? или

[2]: WPF TreeView: How to style selected items with rounded corners like in Explorer, но он не работает.

Затем я создал новый проект и создал TreeView с простым стилем и шаблоном

<TreeView> 
     <TreeViewItem Header="Item1" /> 
     <TreeViewItem Header="Item2" /> 
     <TreeViewItem Header="Item3"/> 

     <TreeView.Resources> 
      <DataTemplate DataType="{x:Type TreeViewItem}" x:Key="selectedTemplate"> 
       <StackPanel Height="25"> 
        <TextBlock Text="SelectedItem"/> 
       </StackPanel> 
      </DataTemplate> 
     </TreeView.Resources> 

     <TreeView.ItemContainerStyle> 
      <Style TargetType="TreeViewItem"> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="FontWeight" Value="Bold"/> 
         <Setter Property="FontStyle" Value="Italic"/> 
         <Setter Property="Foreground" Value="Red"/> 
         <Setter Property="Background" Value="Green"/> 
         <Setter Property="ItemTemplate" Value="{StaticResource selectedTemplate}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView> 

Так, то я выбрал TreeViewItem в виде дерева FontWeight, FontStyle и передний план изменяются, но фон и ItemTemplate не изменилось.

Результат: here

Не могли бы вы объяснить это странное поведение?

ответ

5

ItemTemplate свойство влияет на элементы детей, а не на сам предмет. И фон установлен для фона выбора по умолчанию для Border, который украшает контент, поэтому зеленый цвет внизу не отображается. Вы можете достичь своих целей следующим образом:

<TreeView> 
     <TreeViewItem Header="Item1" /> 
     <TreeViewItem Header="Item2" /> 
     <TreeViewItem Header="Item3"/> 

     <TreeView.Resources> 
      <ControlTemplate TargetType="{x:Type TreeViewItem}" x:Key="selectedTemplate"> 
       <StackPanel Height="25"> 
        <TextBlock Text="SelectedItem" Background="{TemplateBinding Background}" /> 
       </StackPanel> 
      </ControlTemplate> 
     </TreeView.Resources> 

     <TreeView.ItemContainerStyle> 
      <Style TargetType="TreeViewItem"> 
       <Style.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="FontWeight" Value="Bold"/> 
         <Setter Property="FontStyle" Value="Italic"/> 
         <Setter Property="Foreground" Value="Red"/> 
         <Setter Property="Background" Value="Green"/> 
         <Setter Property="Template" Value="{StaticResource selectedTemplate}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView> 
+0

Большое спасибо. Это то, что мне нужно. –

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