Pregunta

El TextBox de WPF utiliza de forma nativa el color de resaltado del sistema para pintar el fondo del texto seleccionado. Me gustaría anular esto y hacerlo coherente, ya que varía según el sistema operativo / tema de usuario.

Para ListBoxItem s, hay un truco ordenado (ver a continuación) donde puede anular la clave de recursos para el HighlightBrushKey para personalizar el color de resaltado del sistema en una configuración enfocada:

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

Desafortunadamente, el mismo truco no funciona para el TextBox . ¿Alguien tiene alguna otra idea, además de '' anular la ControlTemplate " ;?

¡Gracias por cualquier sugerencia!

NOTA: Esto el comportamiento parece haberse agregado a WPF 4.

¿Fue útil?

Solución

Como Steve mencionó: NOTA: este comportamiento parece haberse agregado a WPF 4.

Me encontré con el mismo problema.

Como dice Dr.WPF

  

" Es completamente imposible en el   versiones actuales de .NET (3.0 y 3.5;   beta). El control está codificado para   usa la configuración del sistema ... no lo hace   mire la plantilla de control en absoluto. "

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

Otros consejos

Desde .NET 4, < code> TextBoxBase.SelectionBrush

por ejemplo

<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
         Foreground="Blue" CaretBrush="Blue">  

Esta es una solución probada de Windows 8.1 .Net 4.6.1 para personalizar el SelectionBrush de cada TextBox en la aplicación:

/// 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;
}

Si desea incluir RichTextBox , reemplace el nombre de tipo TextBox 4 veces por TextBoxBase .

Puede crear un Estilo para TextBox y escribir un Setter para el fondo. El estilo TextBox debe ser el predeterminado para que cualquier TextBox que se encuentre debajo del árbol visual obtenga el TextBox modificado

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

Prueba esto:

     <Trigger Property="IsHighlighted" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
                            <Setter Property="Foreground" Value="White"/>
                        </Trigger>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top