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

时间:2009-01-02 03:37:27

标签: wpf resources textbox styles highlighting

WPF TextBox本身使用系统突出显示颜色来绘制所选文本的背景。我想覆盖它并使其保持一致,因为它因操作系统/用户主题而异。

对于ListBoxItem,有一个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.

5 个答案:

答案 0 :(得分:11)

史蒂夫提到:NOTE: This behavior appears to be added to WPF 4.

我碰到了同样的问题。

Dr.WPF说

  

“这完全不可能   当前的.NET版本(3.0&amp; 3.5   测试版)。该控件是硬编码的   使用系统设置......它没有   完全看一下控制模板。“

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

答案 1 :(得分:8)

从.NET 4开始,TextBoxBase.SelectionBrush

例如

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

答案 2 :(得分:0)

这是一个经过Windows 8.1 .Net 4.6.1测试的解决方案,用于自定义应用中每个SelectionBrush的{​​{1}}:

TextBox

如果您希望/// 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次。

答案 3 :(得分:-1)

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

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

答案 4 :(得分:-1)

试试这个:

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