如何更改 WPF 文本框的突出显示文本颜色?

Posted

技术标签:

【中文标题】如何更改 WPF 文本框的突出显示文本颜色?【英文标题】:How can you change the highlighted text color for a WPF TextBox? 【发布时间】:2010-09-29 04:34:00 【问题描述】:

WPF TextBox 原生使用系统高亮颜色来绘制选定文本的背景。我想覆盖它并使其保持一致,因为它因操作系统/用户主题而异。

对于ListBoxItems,有一个neat trick(见下文),您可以在其中覆盖HighlightBrushKey 的资源键以在焦点设置中自定义系统突出显示颜色:

<Style TargetType="ListBoxItem">
    <Style.Resources>
        <SolidColorBrush x:Key="x:Static SystemColors.HighlightBrushKey"
                         Color="LightGreen"/>
    </Style.Resources>
</Style>

不幸的是,同样的技巧不适用于TextBox。除了“覆盖ControlTemplate”之外,还有其他人有什么想法吗?

NOTE: This behavior appears to be added to WPF 4.

【问题讨论】:

【参考方案1】:

您可以为 TextBox 创建一个 Style 并为背景编写一个 Setter。 TextBox 样式应该是默认样式,以便可视化树下的任何 TextBox 都将获得更改后的 TextBox

<Style x:Key="x:Type TextBox" TargetType="x:Type TextBox">

【讨论】:

这会改变整个文本框的背景颜色,我正在寻找的是如何只改变突出部分的背景。不过还是谢谢。【参考方案2】:

正如史蒂夫所说:NOTE: This behavior appears to be added to WPF 4.

我遇到了同样的问题。

正如 WPF 博士所说

“这完全不可能 当前的 .NET 版本(3.0 和 3.5 贝塔)。该控件被硬编码为 使用系统设置...它没有 完全看控制模板。”

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/bbffa6e3-2745-4e72-80d0-9cdedeb69f7f/

【讨论】:

感谢您指出这一点,尤其是 ControlTemplate 也被忽略了,因为我可能会尝试其他所有方法都失败。 答案中的第一个链接已失效 - "404 | Page not found".【参考方案3】:

从 .NET 4 开始,TextBoxBase.SelectionBrush

您可以通过设置 SelectionBrush 和 SelectionOpacity 属性来指定突出显示选定文本的画笔。 SelectionOpacity 属性指定 SelectionBrush 的不透明度。

例如。

<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
         Foreground="Blue" CaretBrush="Blue">  

【讨论】:

【参考方案4】:

试试这个:

     <Trigger Property="IsHighlighted" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
                            <Setter Property="Foreground" Value="White"/>
                        </Trigger>

【讨论】:

IsHighlighted 不是 TextBox 上的属性,您会在哪个元素上使用该触发器? 我再次查看并确认,这不是 TextBox 上的属性。 msdn.microsoft.com/en-us/library/… 我怀疑您使用的是其他类型的控件,或者是自定义派生版本的 TextBox。 上面的例子是一个列表框。 好的,这个问题是关于一个文本框的。 ListBox 是作为示例给出的,其中已经有可用的解决方法。【参考方案5】:

这是一个经过 Windows 8.1 .Net 4.6.1 测试的解决方案,用于自定义应用中每个 TextBoxSelectionBrush

/// Constructor in App.xaml.cs
public App() : base()

    // Register an additional SelectionChanged handler for appwide each TextBox
    EventManager.RegisterClassHandler(typeof(TextBox), TextBox.SelectionChangedEvent, RoutedEventHandler(_textBox_selectionChanged));


private void _textBox_selectionChanged(object sender, RoutedEventArgs e)

    // Customize background color of selected text
    (sender as TextBox).SelectionBrush = Brushes.MediumOrchid;

    // Customize opacity of background color
    (sender as TextBox).SelectionOpacity = 0.5;

如果您想包含RichTextBox,请将类型名称TextBox 4 次替换为TextBoxBase

【讨论】:

以上是关于如何更改 WPF 文本框的突出显示文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Summernote 中的默认文本突出显示颜色?

如何在 NativeScript 中为 iOS 更改突出显示状态的按钮文本颜色?

WPF TextBlock 根据搜索条件突出显示某些部分

在 HTML 文本输入中选择文本时更改突出显示颜色

更改 QGraphicsTextItem 内文本的突出显示颜色

悬停时更改 SVG 填充和文本突出显示颜色