【问题标题】:WPF change (override) highlight and border color in all controlsWPF 更改(覆盖)所有控件中的突出显示和边框颜色
【发布时间】: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 不存在。编写所需的样式需要三行代码(请参阅我的答案)。

标签: c# wpf xaml


【解决方案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 设置所选文本的前景色。
猜你喜欢
  • 1970-01-01
  • 2017-12-13
  • 2014-11-02
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2010-09-29
  • 2019-03-05
  • 2015-04-25
相关资源
最近更新 更多