Como você pode mudar a cor do texto destacado para um WPF TextBox?
-
03-07-2019 - |
Pergunta
O TextBox
WPF nativamente faz uso da cor Destaque Sistema para pintar o fundo do texto selecionado. Eu gostaria de substituí-lo e torná-lo coerente, uma vez que varia de acordo com o tema OS / usuário.
Para ListBoxItem
s, há um puro truque (veja abaixo), onde você pode substituir a chave de recurso para o HighlightBrushKey
personalizar a cor de destaque Sistema em um focado configuração:
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/>
</Style.Resources>
</Style>
O mesmo truque não funciona para o TextBox
infelizmente. Alguém tem outras ideias, além de "substituir o ControlTemplate
"?
Obrigado por todas as sugestões!
Solução
Como Steve mencionado: NOTA: Este comportamento parece ser adicionado ao WPF 4.
topei com o mesmo problema.
diz Como Dr.WPF
"É inteiramente impossível no NET lançamentos actuais (3,0 & 3,5 beta). O controlo é codificado para usar a configuração do sistema ... isso não acontece olhar para o modelo de controle em tudo. "
http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/bbffa6e3-2745-4e72-80d0-9cdedeb69f7f/
Outras dicas
Desde .NET 4, TextBoxBase.SelectionBrush
ex
<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
Esta é uma solução do Windows 8.1 .Net 4.6.1 testado para personalizar o SelectionBrush
de cada TextBox
no aplicativo:
/// 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;
}
Se você quiser incluir RichTextBox
substituir tipo de nome TextBox
4 vezes por TextBoxBase
.
Você pode criar um estilo para o TextBox e escrever um Setter para o fundo. O estilo de caixa de texto deve ser um padrão para que qualquer TextBox que está sob a árvore visual terá o mudou TextBox
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
Tente isto:
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>