Как вы можете изменить выделенный цвет текста для текстового поля WPF? - PullRequest
13 голосов
/ 02 января 2009

WPF TextBox изначально использует цвет Подсветка системы для рисования фона выделенного текста. Я хотел бы переопределить это и сделать его согласованным, поскольку он зависит от ОС / пользовательской темы.

Для ListBoxItem с есть аккуратный трюк (см. Ниже), где вы можете переопределить ключ ресурса для HighlightBrushKey, чтобы настроить цвет подсветки системы в сфокусированном параметре:

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

К сожалению, такой же трюк не работает для TextBox. У кого-нибудь есть другие идеи, кроме "переопределить ControlTemplate"?

Спасибо за любые предложения!

ПРИМЕЧАНИЕ. Такое поведение добавлено в WPF 4.

Ответы [ 5 ]

11 голосов
/ 02 января 2009

Как упомянул Стив: ПРИМЕЧАНИЕ. Такое поведение добавлено в WPF 4.

Я столкнулся с той же проблемой.

Как говорит Dr.WPF

"Это совершенно невозможно в текущие релизы .NET (3.0 и 3.5 бета). Элемент управления жестко использовать настройки системы ... это не так посмотрите на шаблон управления вообще. "

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

8 голосов
/ 01 октября 2013

С .NET 4, TextBoxBase.SelectionBrush

например

<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
         Foreground="Blue" CaretBrush="Blue">  
0 голосов
/ 20 декабря 2015

Это протестированное решение для 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.

0 голосов
/ 29 ноября 2014

Попробуйте это:

     <Trigger Property="IsHighlighted" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
                            <Setter Property="Foreground" Value="White"/>
                        </Trigger>
0 голосов
/ 02 января 2009

Вы можете создать стиль для TextBox и написать сеттер для фона. Стиль TextBox должен быть по умолчанию, чтобы любой TextBox, который находится под визуальным деревом, получал измененный TextBox

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