在 WPF TreeView 中更改 child 节点项颜色
Change child node item color in WPF TreeView
我正在尝试在 wpf 中构建一个 TreeView。我需要我的 parent 和 child 具有不同的颜色,并且我需要为该 TreeView 中的所有 parent 完成此操作。如果任何节点包含任何 child 节点,则该颜色也需要更改。
我需要相同背景颜色的两栖动物和蜘蛛,并且所有 child 项都应包含另一种背景颜色。如何做到这一点...?
到目前为止我已经试过了
<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>
如果 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>
另一种方法是将 TextBlock 包装到带背景的边框中。这里可以为每种类型单独设置背景。
<DataTemplate>
<Border Background="Aqua" Margin="4">
<TextBlock Text="{Binding Path=Name}"/>
</Border>
</DataTemplate>
我为 Border 设置 Margin="4"
以启用所选项目的默认突出显示
我正在尝试在 wpf 中构建一个 TreeView。我需要我的 parent 和 child 具有不同的颜色,并且我需要为该 TreeView 中的所有 parent 完成此操作。如果任何节点包含任何 child 节点,则该颜色也需要更改。
我需要相同背景颜色的两栖动物和蜘蛛,并且所有 child 项都应包含另一种背景颜色。如何做到这一点...?
到目前为止我已经试过了
<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>
如果 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>
另一种方法是将 TextBlock 包装到带背景的边框中。这里可以为每种类型单独设置背景。
<DataTemplate>
<Border Background="Aqua" Margin="4">
<TextBlock Text="{Binding Path=Name}"/>
</Border>
</DataTemplate>
我为 Border 设置 Margin="4"
以启用所选项目的默认突出显示