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 HighlightBrushKey per personalizzare il colore di evidenziazione del sistema in un'impostazione mirata:

  <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.

È stato utile?

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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top