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

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
腾讯CDC
G
Google Developers Blog
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
美团技术团队
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

博客园 - 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:控件拥有焦点时选中项的背景/前景色(文字颜色)。