The color of all tree elements should be taken from Node x_color

Here, the color is determined by the triggers, and you need to set the Node tree

XAML

 <TreeView x:Name="tw_tree_b"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="Foreground" Value="White" /> <Style.Triggers> <Trigger Property="IsSelected" Value="True" > <Setter Property="Foreground" Value="Silver"/> <Setter Property="FontWeight" Value="Normal"/> </Trigger> <Trigger Property="IsSelected" Value="False" > <Setter Property="FontWeight" Value="Normal"/> </Trigger> </Style.Triggers> </Style> </TreeView.ItemContainerStyle> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding collection_node}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding name_}"> </TextBlock> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> 

Node

 public class Node { public string name_ { get; set; } public Color x_color { get; set; } // public ObservableCollection<Node> collection_node { get; set; } 

    1 answer 1

    You need to add a binding to x_color in the ItemContainerStyle . The only problem is that the Foreground property takes the type Brush, not Color. There are two options: change the type of the property x_color in Node or use ValueConverter .

    Option 1:

    .cs

     public class Node { public Node() { collection_node = new ObservableCollection<Node>(); } public string name_ { get; set; } public Brush x_color { get; set; } public ObservableCollection<Node> collection_node { get; set; } } 

    .xaml

     <TreeView x:Name="tw_tree_b"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="Foreground" Value="{Binding x_color}" /> </Style> </TreeView.ItemContainerStyle> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding collection_node}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding name_}"> </TextBlock> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> 

    Option 2:

    .cs

     public class Node { public Node() { collection_node = new ObservableCollection<Node>(); } public string name_ { get; set; } public Color x_color { get; set; } public ObservableCollection<Node> collection_node { get; set; } } public class ColorToBrushConverter:IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var color = (Color) value; return new SolidColorBrush(color); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { var brush = (SolidColorBrush) value; return brush.Color; } } 

    .xaml

     <TreeView x:Name="tw_tree_b"> <TreeView.Resources> <my:ColorToBrushConverter x:Key="conv"/> </TreeView.Resources> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="Foreground" Value="{Binding x_color, Converter={StaticResource conv}}" /> </Style> </TreeView.ItemContainerStyle> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding collection_node}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding name_}"> </TextBlock> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate>