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 ListBoxItems, 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!

NOTA: Este comportamento parece ser adicionado ao WPF 4.

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top