¿Cómo puede cambiar el color de texto resaltado para un cuadro de texto WPF?
-
03-07-2019 - |
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
<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.
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>