【问题标题】:Change the colour of the particular element in Treeview WPF更改 Treeview WPF 中特定元素的颜色
【发布时间】:2013-05-27 06:09:29
【问题描述】:

我的WPF 应用程序中有一个Treeview。在运行时,在运行时,如果Tree 的元素满足特定条件,它应该将其Font color 从黑色变为红色。!

XAML

<TreeView Grid.Column="0" Grid.Row="0"  HorizontalAlignment="Stretch" Name="treeView1" 
                      VerticalAlignment="Stretch"
                      SelectedItemChanged="treeView1_SelectedItemChanged" HorizontalContentAlignment="Stretch" 
                      VerticalContentAlignment="Top" BorderThickness="0,0,0,1" BorderBrush="LightGray">

    <TreeViewItem Header="Head Tree" ItemsSource="{Binding MainComps}">
        <TreeViewItem.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
            <Setter Property="FontWeight" Value="Normal" />

            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="FontWeight" Value="Bold" />
                </Trigger>

                <DataTrigger Binding="{Binding IsSelected}" Value="True">
                        <Setter Property="Foreground" Value="RED" />
                </DataTrigger>
            </Style.Triggers>                                 
        </Style>
    </TreeViewItem.ItemContainerStyle>

    <TreeViewItem.Resources>
        <HierarchicalDataTemplate  DataType="{x:Type TextBlock}" ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="Head Tree" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:MainCompViewModel}" ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Maincompname}" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:FeatureViewModel}" ItemsSource="{Binding Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding FeatureName}" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <DataTemplate DataType="{x:Type local:CompViewModel}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Component}" />
            </StackPanel>
        </DataTemplate>                               
    </TreeViewItem.Resources>
    </TreeViewItem>
</TreeView>

Code behind

private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
    if(selected Item meets certain condition)
    {
         //Change color of tree node
    }
}

如何更改特定节点的颜色并使其保持相同的颜色,以便再次展开时它应该在RED。 任何帮助将不胜感激。

【问题讨论】:

标签: c# wpf treeview


【解决方案1】:

您可以在模型中创建一个布尔属性,当元素满足条件时该属性为真。然后你像这样绑定前景:

                       <TreeView.ItemContainerStyle>
                            <Style TargetType="{x:Type TreeViewItem}">
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding Path=BoolProp}" Value="False">
                                        <Setter Property="Foreground" Value="Blue"></Setter>
                                    </DataTrigger>
                                    <DataTrigger Binding="{Binding Path=BoolProp}" Value="True">
                                        <Setter Property="Foreground" Value="Red"></Setter>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </TreeView.ItemContainerStyle>

或使用转换器:

                       <TreeView.ItemContainerStyle>
                            <Style TargetType="{x:Type TreeViewItem}">
                                <Setter Property="Foreground" Value="{Binding Path=BoolProp, Converter={StaticResource ResourceKey=TheKey}}"/>
                            </Style>
                        </TreeView.ItemContainerStyle>

【讨论】:

  • 所选节点下方的所有子元素都变为红色,而不是特定元素。
  • @BinaryMee 你是如何解决所有孩子变红的问题的?
【解决方案2】:

只需更改前景:

TreeViewItem ti = (TreeViewItem)treeView1.SelectedItem;
ti.Foreground = Brushes.Red;

【讨论】:

  • 上午收到此错误。 “System.Windows.Controls.TreeView”不包含“SelectedNode”的定义,并且找不到接受“System.Windows.Controls.TreeView”类型的第一个参数的扩展方法“SelectedNode”(您是否缺少 using 指令还是程序集参考?)
  • 我认为是SelectedItem,而不是SelectedNode
  • 是的,SelectedItem 似乎是进入 WPF 的方式(使用表单)。但这会返回一个对象。尝试类似: TreeViewItem ti =(TreeViewItem)treeView1.SelectedItem; ti.Foreground = 颜色.红色;
  • 再次编辑,希望对您有所帮助:尝试 Brushes.Red 而不是 Color.Red。
【解决方案3】:

嵌入到模板中。您只能通过复制控件的默认 Aero-Style 并更改硬编码值来更改颜色。

或者通过在加载时向下钻取可视化树来改变它。

要获得默认样式和模板,请通过MSDN

也可以从这里逐步检查EXAMPLE

【讨论】:

    猜你喜欢
    • 2022-01-09
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多