如何更改 WPF 文本框的突出显示文本颜色?
Posted
技术标签:
【中文标题】如何更改 WPF 文本框的突出显示文本颜色?【英文标题】:How can you change the highlighted text color for a WPF TextBox? 【发布时间】:2010-09-29 04:34:00 【问题描述】:WPF TextBox
原生使用系统高亮颜色来绘制选定文本的背景。我想覆盖它并使其保持一致,因为它因操作系统/用户主题而异。
对于ListBoxItem
s,有一个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 测试的解决方案,用于自定义应用中每个 TextBox
的 SelectionBrush
:
/// 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 文本框的突出显示文本颜色?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NativeScript 中为 iOS 更改突出显示状态的按钮文本颜色?