WPF 更改(覆盖)所有控件中的突出显示和边框颜色

Posted

技术标签:

【中文标题】WPF 更改(覆盖)所有控件中的突出显示和边框颜色【英文标题】:WPF change (override) highlight and border color in all controls 【发布时间】:2022-01-11 00:20:29 【问题描述】:

在问这个问题之前,我研究并测试了很多代码。

IDEVS2022操作系统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。 感谢您的帮助,但将 &lt;SolidColorBrush x:Key="x:Static SystemColors.SelectionTextBrushKey" Color="Red"/&gt; 添加到 XAML 会返回运行时错误。 使用Style 100% 有效,但问题是这样做需要更多的 XAML 代码。我想知道是否可以覆盖系统颜色,因为这样做更容易。 SelectionTextBrushKey 不存在。编写所需的样式需要三行代码(请参阅我的答案)。 【参考方案1】:

TextBoxPasswordBox 通过SelectionBrush 属性控制它们的高光画笔。并非所有控件都使用SystemColors.HighlightBrushKey。例如,SystemColors.HighlightBrushKeyDataGrid 使用,但 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 边框颜色?

WPF 更改或覆盖默认系统颜色

样式不会更改 Cast Introductory Overlay 中的标题文本和按钮突出显示动画颜色

html表格如何通过更改悬停边框来突出显示列?

选择行时禁用uitableviewcell中的突出显示按钮

如何改变winform(c#)标题栏的颜色