2012-02-02 133 views
2

我想在TreeView中更改SelectedItem模板。 我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> 
     <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> 

所以,后来我在树视图中选择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

非常感谢。这是我需要的。 – 2012-02-02 11:01:39