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
”之外,还有没有其他想法?
感谢您的任何建议!
答案 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>