WPF Как изменить цвет текста выбранного элемента списка, когда поле списка теряет фокус - PullRequest
5 голосов
/ 24 июня 2010

Я искал, как изменить цвет текста выбранного элемента в списке, который потерял фокус.

  <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
  <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
  <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Orange"/>

Эти три тега выполняют большую часть работы, но у моего списка есть черный фон, и когда элемент управления теряет фокус, шрифт становится черным.

Я нашел этот список из другого поста SystemColor.Клавиши , которые дают массу возможных вариантов из этого списка, и все, что кажется интуитивно понятным, не работает.Кто-нибудь знает ключ, который мне нужно изменить?

Ответы [ 2 ]

8 голосов
/ 02 августа 2012

Я поместил это в словарь ресурсов для элемента, содержащего список:

               <Style TargetType="ListBoxItem">
                <Style.Resources>
                    <!--SelectedItem with focus-->
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Blue"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="White"/>
                    <!--SelectedItem without focus-->
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Blue"/>
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="White"/>
                </Style.Resources>
            </Style>

Обратите внимание, что в .Net 4.5 вы должны запросить «старое» поведение, установив

      FrameworkCompatibilityPreferences.
            AreInactiveSelectionHighlightBrushKeysSupported = false;

в начале вашей программы до создания каких-либо окон.

1 голос
/ 26 июня 2012

используйте следующий код и просто измените цвета, например, используя Colors.Black

listBox.Resources.Add(SystemColors.ControlBrushKey, new SolidColorBrush(Color.FromArgb(0xFF, 0x7F, 0xDB, 0x14)));
listBox.Resources.Add(SystemColors.ControlTextBrushKey, Brushes.White);

Удачи.

...