惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
博客园 - Franky
V
V2EX
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
T
The Blog of Author Tim Ferriss
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Jina AI
Jina AI
博客园 - 叶小钗
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
D
Docker
博客园 - 【当耐特】
阮一峰的网络日志
阮一峰的网络日志

博客园 - z5337

【转】禁用 Chrome 浏览器的自动更新 【转】Avalonia 12 最小信创项目模板 【转】Avalonia 周边介绍 【转】国产操作系统对 Avalonia 的支持情况 【转】国产操作系统优化篇 [openKylin] 入门知识点 【转】国产操作系统优化篇 [openKylin] 第一步 - Qt + VMware 【转】p2055dn 打印机配置 IP 地址 【转】Windows 锁屏后屏幕不熄灭排查 【转】既然 java 8 因为组件容易被攻击,.net core 也有大量第三方组件,是不是也容易出问题 【转】最小 web api 学习 【转】使用记事本区分图片格式 【转】蓝牙耳机的播放控制 【转】JoyToKey 键位映射 【转】[C#] 要从接口取时间,单个订单查询和批量查询,写一个接口还是两个接口合适? 【转】[C#] Web API 中的常见层次 【转】[C#] .net core 项目的目标框架设置 【转】[C#] 项目里的配置文件与选项对比 【转】[C#] GlobalUsing 的使用 【转】[.net core] 项目的 Windows 服务器部署 【转】《三字经》全文 【转】[IDEA] 调试时怎么判断使用哪个配置文件 【转】PO、DO、VO、BO、DTO、DAO、POJO 的区别 【转】[web]怎么移除网页最上层的水印 【转】[C#] 30+个.NET开发最佳实践 【转】Windows Server 系统的桌面上显示 此电脑 图标 【转】[C#] 参数前加 in 的作用 【转】[C#] Enum 的 Flags 特性 【转】[C#] Tuples 元组介绍 【转】[C#] Record 的使用 【转】[C#] 预处理指令
【转】[C#] WPF 保留选中的高亮色
z5337 · 2025-08-13 · via 博客园 - z5337

转自:kimi


在 WPF 里,原生控件本身在失去焦点后都会默认取消视觉高亮,但可以通过修改系统画刷或自定义样式,让以下控件在失焦后仍然保留“选中”背景色:


✅ 常见支持“失焦仍高亮”的控件

控件是否支持失焦保留选中背景实现方式
DataGrid ✅ 支持 修改 InactiveSelectionHighlightBrushKey 系统画刷  
ListBox / ListBoxItem ✅ 支持 自定义 Item.SelectedInactive.Background 画刷  
TreeViewItem ✅ 支持 自定义样式中设置 SelectedInactive 背景色(类似 ListBox)
ListView ✅ 支持 与 ListBox 类似,需自定义 ItemContainerStyle
第三方 GridControl(如 DevExpress) ✅ 支持 设置 FadeSelectionOnLostFocus="False"  

❌ 不支持失焦保留选中背景的控件

控件原因
TextBox、ComboBox、CheckBox 等输入控件 它们没有“选中项”概念,只有焦点状态,失焦后不会保留背景高亮
UserControl 除非你自己在模板里模拟选中状态,否则不会保留任何“选中”视觉

✅ 示例:DataGrid 失焦保留选中行背景色

<DataGrid>
    <DataGrid.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="#FFCBE8F6"/>
    </DataGrid.Resources>
</DataGrid>

✅ 示例:ListBoxItem 失焦保留背景色

<Style TargetType="ListBoxItem">
    <Style.Resources>
        <SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#CBE8F6"/>
    </Style.Resources>
</Style>

✅ 小结

DataGrid、ListBox、TreeView、ListView 等“项容器型”控件,都可以通过样式或系统画刷,在失去焦点后仍然显示选中背景色。
而像 TextBox、Button 这类控件,没有“选中项”概念,也就谈不上“失焦保留选中背景”。


在 App.xaml 或系统主题里覆盖同名键即可:

<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="{x:Static SystemColors.HighlightColor}" />
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="{x:Static SystemColors.HighlightTextColor}" />

常见使用场景

场景说明
DataGrid 失去焦点后行变灰 默认就是受此键控制
ListBox / ListView 非活动选择色 同样受此键影响
想让它跟焦点内颜色一致 把此键覆盖成 HighlightBrushKey 的颜色即可
  • InactiveSelectionHighlightBrushKey / InactiveSelectionHighlightTextBrushKey:失去焦点后选中项的背景/前景色(文字颜色)。

  • HighlightBrushKey / HighlightTextBrushKey:控件拥有焦点时选中项的背景/前景色(文字颜色)。