在WPF TreeView中更改子节点项颜色

时间:2016-04-08 13:33:54

标签: c# wpf xaml treeview

我正在尝试在wpf中构建一个TreeView。我需要我的父母和孩子使用不同的颜色,我需要为TreeView中的所有父母完成这项工作。如果任何节点包含任何子节点,则还需要更改这些颜色。

enter image description here

我需要相同背景颜色的AMPHIBIANS和SPIDERS,并且所有子项应包含另一种背景颜色。怎么做......?

到目前为止,我已经尝试了

<Window.Resources>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="Background" Value="#4E4E4E"/>
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="FontSize" Value="15"/>
    </Style>

    <Style x:Key="styTvMenu" TargetType="{x:Type TreeView}">
        <Setter Property="Foreground" Value="Green"/>
    </Style>
</Window.Resources>
<Grid>
    <TreeView ItemsSource="{x:Static local:MainWindow.AnimalCategories}"  Style="{StaticResource styTvMenu}" Margin="0,0,321,0">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=Animals}">
                <HierarchicalDataTemplate.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Name}"/>
                    </DataTemplate>
                </HierarchicalDataTemplate.ItemTemplate>
                <TextBlock  Text="{Binding Path=Category}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>

    </TreeView>
</Grid>

1 个答案:

答案 0 :(得分:1)

如果TreeViewItem在有子项时应该有一种颜色而在没有子项的情况下应该有另一种颜色,则可以设置这样的触发器

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="Background" Value="#4E4E4E"/>
    <Style.Triggers>
        <Trigger Property="HasItems" Value="False">
            <Setter Property="Background" Value="Aqua"/>
        </Trigger>
    </Style.Triggers>
</Style>

另一种方法是将TextBlocks包装到Border with Background中。这里可以为每种类型单独设置背景。

<DataTemplate>
     <Border Background="Aqua" Margin="4">
          <TextBlock Text="{Binding Path=Name}"/>
     </Border>
</DataTemplate>

我为边框设置Margin="4"以启用所选项目的默认突出显示