WPF 更改(覆盖)所有控件中的突出显示和边框颜色
Posted
技术标签:
【中文标题】WPF 更改(覆盖)所有控件中的突出显示和边框颜色【英文标题】:WPF change (override) highlight and border color in all controls 【发布时间】:2022-01-11 00:20:29 【问题描述】:在问这个问题之前,我研究并测试了很多代码。
IDE:VS2022
。 操作系统:Windows 11
。 应用:WPF
.NET 6
(核心)C#
T-SQL
我正在尝试覆盖资源字典中的 SystemColors。
我可以覆盖这个值成功:
<SolidColorBrush x:Key="x:Static SystemColors.ControlTextBrushKey" Color="Red" />
问题是,我无法使用以下方法覆盖突出显示颜色:
<SolidColorBrush x:Key="x:Static SystemColors.HighlightBrushKey" Color="Red" />
结果:
我做错了什么?
感谢您的帮助。
更新:
使用样式不起作用。
<Style TargetType="PasswordBox">
<Setter Property="SelectionBrush" Value="Red" />
<Setter Property="SelectionTextBrush" Value="Red" />
</Style>
【问题讨论】:
TextBox 和 PasswordBox 通过 SelectionTextBrush 属性控制它们的高亮画笔。并非所有控件都使用 SystemColors.HighlightBrushKey。例如,DataGrid 使用 SystemColors.HighlightBrushKey,但 ListBox 不使用。 您必须在 App.xaml 中创建一个以 TextBox 和 PasswordBox 为目标的样式才能全局设置 SelectionTextBrush。 感谢您的帮助,但将<SolidColorBrush x:Key="x:Static SystemColors.SelectionTextBrushKey" Color="Red"/>
添加到 XAML 会返回运行时错误。
使用Style
100% 有效,但问题是这样做需要更多的 XAML 代码。我想知道是否可以覆盖系统颜色,因为这样做更容易。
SelectionTextBrushKey 不存在。编写所需的样式需要三行代码(请参阅我的答案)。
【参考方案1】:
TextBox
和PasswordBox
通过SelectionBrush
属性控制它们的高光画笔。并非所有控件都使用SystemColors.HighlightBrushKey
。例如,SystemColors.HighlightBrushKey
被 DataGrid
使用,但 ListBox
不使用。
使用SelectionOpacity
控制高光画笔的不透明度。
要全局更改SelectionBrush
,您必须将Style
添加到App.xaml 资源:
App.xaml
<ResourceDictionary>
<Style TargetType="PasswordBox">
<Setter Property="SelectionBrush" Value="Red" />
<Setter Property="SelectionOpacity" Value="0.8" />
</Style>
<Style TargetType="TextBox">
<Setter Property="SelectionBrush" Value="Red" />
<Setter Property="SelectionOpacity" Value="0.8" />
</Style>
</ResourceDictionary>
【讨论】:
它有效。谢谢。 @Toni 该属性是 SelectionBrush 而不是 SelectionTextBrush。我的错,对不起。当前示例应该可以工作。 @Toni SelectionTextBrush 设置所选文本的前景色。以上是关于WPF 更改(覆盖)所有控件中的突出显示和边框颜色的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中突出显示(或点击)按钮时如何更改 UIButton 边框颜色?