14

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

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

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

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

注意:此行为似乎已添加到 WPF 4。

4

5 回答 5

11

从 .NET 4 开始,TextBoxBase.SelectionBrush

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

例如。

<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
         Foreground="Blue" CaretBrush="Blue">  
于 2013-10-01T14:57:16.257 回答
10

正如史蒂夫所提到的:注意:此行为似乎已添加到 WPF 4。

我遇到了同样的问题。

正如 WPF 博士所说

“在当前的 .NET 版本(3.0 和 3.5 beta)中这是完全不可能的。控件被硬编码为使用系统设置......它根本不查看控件模板。”

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

于 2009-01-02T08:51:16.387 回答
0

这是一个经过 Windows 8.1 .Net 4.6.1 测试的解决方案,用于自定义应用程序SelectionBrush中的每个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替换类型名称TextBox4 次TextBoxBase

于 2015-12-20T13:44:59.727 回答
-1

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

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
于 2009-01-02T08:45:26.960 回答
-1

试试这个:

     <Trigger Property="IsHighlighted" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
                            <Setter Property="Foreground" Value="White"/>
                        </Trigger>
于 2014-11-29T08:35:59.617 回答