Come puoi cambiare il colore del testo evidenziato per una TextBox WPF?
-
03-07-2019 - |
Domanda
Il WPF TextBox
utilizza nativamente il colore di evidenziazione del sistema per dipingere lo sfondo del testo selezionato. Vorrei sostituirlo e renderlo coerente poiché varia in base al tema del sistema operativo / utente.
Per ListBoxItem
, esiste un trucco accurato (vedi sotto) in cui puoi sovrascrivere la chiave di risorsa per il
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightGreen"/>
</Style.Resources>
</Style>
Purtroppo lo stesso trucco non funziona per TextBox
. Qualcuno ha altre idee, oltre a " sovrascrivere il ControlTemplate
" ;?
Grazie per eventuali suggerimenti!
NOTA: Questo il comportamento sembra essere aggiunto a WPF 4.
Soluzione
Come menzionato Steve: NOTA: questo comportamento sembra essere stato aggiunto a WPF 4.
Ho riscontrato lo stesso problema.
Come dice Dr.WPF
" È del tutto impossibile in attuali versioni di .NET (3.0 e 3.5; beta). Il controllo è hardcoded usa le impostazioni di sistema ... no guarda il modello di controllo. "
http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/bbffa6e3-2745-4e72-80d0-9cdedeb69f7f/
Altri suggerimenti
Da .NET 4, < code> TextBoxBase.SelectionBrush
es
<TextBox SelectionBrush="Red" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
Questa è una soluzione testata per Windows 8.1 .Net 4.6.1 per personalizzare il SelectionBrush
di ciascun TextBox
nell'app:
/// 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 si desidera includere RichTextBox
sostituire il nome del tipo TextBox
4 volte con TextBoxBase
.
Puoi creare uno stile per TextBox e scrivere un setter per lo sfondo. Lo stile TextBox dovrebbe essere predefinito in modo che qualsiasi TextBox che si trova sotto l'albero visivo ottenga il TextBox modificato
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
Prova questo:
<Trigger Property="IsHighlighted" Value="True">
<Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>