Как вы можете изменить выделенный цвет текста для WPF TextBox?
В WPF TextBox
изначально используется цвет выделения системы для рисования фона выделенного текста. Я хотел бы переопределить это и сделать его последовательным, поскольку он зависит от темы OS/user.
Для ListBoxItem
s существует аккуратный трюк (см. ниже), где вы можете переопределить ключ ресурса для HighlightBrushKey
для настройки цвета подсветки системы в сфокусированной настройке:
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/>
</Style.Resources>
</Style>
Тот же трюк не работает для TextBox
, к сожалению. Есть ли у кого-нибудь другие идеи, кроме "переопределить ControlTemplate
"?
Спасибо за любые предложения!
ПРИМЕЧАНИЕ. Это поведение добавляется в WPF 4.
Ответы
Ответ 1
Как сказал Стив: ПРИМЕЧАНИЕ. Это поведение добавляется в WPF 4.
Я столкнулся с той же проблемой.
Как сообщает Dr.WPF
"Это совершенно невозможно в текущие версии .NET(3.0 и 3.5 бета). Управление жестко привязано к используйте системные настройки... это не посмотрите на шаблон управления вообще."
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/bbffa6e3-2745-4e72-80d0-9cdedeb69f7f/
Ответ 2
Начиная с .NET 4, TextBoxBase.SelectionBrush
например,
<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
Ответ 3
Это проверенное решение 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
заменить имя типа TextBox
4 раза на TextBoxBase
.
Ответ 4
Вы можете создать стиль для TextBox и написать Setter для фона. Стиль TextBox должен быть по умолчанию, так что любой TextBox, который попадает под визуальное дерево, получит измененный TextBox
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
Ответ 5
Попробуйте следующее:
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>