Question

La WPF TextBox utilise nativement la couleur de surbrillance du système pour peindre l'arrière-plan du texte sélectionné. Je voudrais remplacer ceci et le rendre cohérent car il varie selon le thème du système d'exploitation / utilisateur.

Pour les ListBoxItem , il existe un astuce soignée (voir ci-dessous) où vous pouvez remplacer la clé de ressource pour le HighlightBrushKey pour personnaliser la couleur de surbrillance du système dans un paramètre défini:

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

Malheureusement, la même astuce ne fonctionne pas pour la TextBox . Quelqu'un a-t-il d'autres idées à part "remplacer le ControlTemplate "?

Merci pour vos suggestions!

REMARQUE: Cette Ce comportement semble avoir été ajouté à WPF 4.

Était-ce utile?

La solution

Comme l'a mentionné Steve: REMARQUE: ce problème semble avoir été ajouté à WPF 4.

Je suis tombé sur le même problème.

Comme le dit le Dr.WPF

  

"Il est tout à fait impossible dans le   Versions actuelles .NET (3.0 & 3.5   bêta). Le contrôle est codé en dur   utilisez les paramètres du système ... ça ne marche pas   examinez le modèle de contrôle. "

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

Autres conseils

Depuis .NET 4, < code> TextBoxBase.SelectionBrush

par exemple

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

Il s'agit d'une solution testée sous Windows 8.1 .Net 4.6.1 pour personnaliser le SelectionBrush de chaque TextBox de l'application:

/// 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 vous souhaitez inclure RichTextBox , remplacez le nom du type TextBox 4 fois par TextBoxBase .

Vous pouvez créer un style pour la zone de texte et écrire un sélecteur pour l'arrière-plan. Le style TextBox doit être un style par défaut pour que toute TextBox figurant dans l’arborescence visuelle obtienne la TextBox modifiée

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

Essayez ceci:

     <Trigger Property="IsHighlighted" Value="True">
                            <Setter TargetName="Border" Property="Background" Value="OrangeRed"/>
                            <Setter Property="Foreground" Value="White"/>
                        </Trigger>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top