You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI3中如何修改TreeView选中项的前景色?

WinUI3 TreeView选中项前景色修改方案

你遇到的核心问题有两个:一是TextBlock硬编码了Foreground="Black",覆盖了选中状态下的前景色样式;二是缺少对应的前景色资源键定义。

解决步骤:

  1. 移除硬编码的前景色
    删掉TextBlock里的Foreground="Black",让控件能继承选中状态下的资源样式。

  2. 添加前景色资源键
    WinUI3提供了以下几个用于TreeView选中项前景色的资源键:

    • TreeViewItemForegroundSelected:常规选中状态的前景色
    • TreeViewItemForegroundSelectedPointerOver:选中且鼠标悬停时的前景色
    • TreeViewItemForegroundSelectedPressed:选中且鼠标按下时的前景色

修改后的完整XAML代码:

<TreeView ItemsSource="{x:Bind ViewModel.TreeViewItems}" SelectedItem="{Binding SelectedTreeViewItem, Mode=TwoWay}">
    <TreeView.Resources>
        <!-- 背景色资源(保留你原来的设置) -->
        <SolidColorBrush x:Key="TreeViewItemBackgroundSelected" Color="#2CACE3" />
        <SolidColorBrush x:Key="TreeViewItemBackgroundSelectedPointerOver" Color="#2CACE3" />
        <SolidColorBrush x:Key="TreeViewItemBackgroundSelectedPressed" Color="#2CACE3" />
        
        <!-- 新增前景色资源 -->
        <SolidColorBrush x:Key="TreeViewItemForegroundSelected" Color="White" />
        <SolidColorBrush x:Key="TreeViewItemForegroundSelectedPointerOver" Color="White" />
        <SolidColorBrush x:Key="TreeViewItemForegroundSelectedPressed" Color="White" />
    </TreeView.Resources>

    <TreeView.ItemTemplate>
        <DataTemplate x:DataType="viewModel:TreeNodeModel">
            <TreeViewItem ItemsSource="{Binding Children}">
                <!-- 移除了硬编码的Foreground="Black" -->
                <TextBlock Text="{x:Bind DisplayText}" />
            </TreeViewItem>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

补充说明:

如果需要更精细地控制样式(比如自定义模板),可以提取TreeViewItem的默认样式,修改Selected、SelectedPointerOver等视觉状态下的前景色,但上述通过资源键覆盖的方式是最简洁的方案,适合大多数场景。

内容的提问来源于stack exchange,提问作者Siva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:18:21