Измените выбранный и несфокусированный стиль списка, чтобы не было выделено серым цветом
У меня есть действительно простой WPF ListBox с SelectionMode, установленным в Multiple.
<ListBox SelectionMode="Multiple" />
Когда ListBox теряет фокус, очень сложно сказать, что было выбрано, потому что цвет выделения меняется с синего на светло-серый. Какой самый простой способ изменить это поведение, чтобы он оставался синим?
Я знаю, что это как-то связано со стилем ListItem, но я не могу найти, где.
Приветствия.
Similar:
Цвет неактивного выбора WPF ListView
Ответы
Ответ 1
Я сделал что-то подобное, используя следующее в объединенном ResourceDictionary, это может помочь вам:
<Style TargetType="ListBoxItem">
<Style.Resources>
<!--SelectedItem with focus-->
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" Opacity=".4"/>
<!--SelectedItem without focus-->
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey }" Color="LightBlue" Opacity=".4"/>
</Style.Resources>
</Style>
Ответ 2
Это не ответ на вопрос, но я нашел это, когда искал способ отключить выбор в моих списках. Используя слегка измененную форму техники Гая и бендвей выше, оказывается, что вы не можете отображать в своем списке отсутствие выбора без замены элемента управления элементами или что-то в этом роде. Вот код, который я использовал:
<Grid.Resources>
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="White" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="White" />
</Style.Resources>
</Style>
</Grid.Resources>
Я также нашел следующую страницу MSDN:
MSDN: члены SystemColors (System.Windows)
Спасибо за помощь, ребята.
Ответ 3
Более полное решение будет состоять в том, чтобы новая кисть ссылалась на HighlightColor:
<Style TargetType="ListBox">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListBoxItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static Member=SystemColors.InactiveSelectionHighlightBrushKey}"
Color="{DynamicResource ResourceKey={x:Static Member=SystemColors.HighlightColorKey}}" />
</Style.Resources>
</Style>
</Setter.Value>
</Setter>
</Style>
Это гарантирует, что он использует тот же цвет и соответствует системной теме (даже если системная тема изменяется во время выполнения, благодаря DynamicResource).
Кстати, кажется, что последние версии WPF больше не используют для этого "ControlBrush", но более подходящий "InactiveSelectionHighlightBrush".
Ответ 4
Вероятно, вы можете решить свою проблему, переписав шаблон, но попробуйте сделать это для легкого патча.
<Style TargetType="ListViewItem">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Blue" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Blue" />
</Style.Resources>
</Style>
Ответ 5
У меня также есть эта проблема. Но я решил это, используя IsSynchronizedWithCurrentItem = "True":
<ListBox
IsSynchronizedWithCurrentItem="True" />
Ответ 6
Когда выбранные элементы становятся серыми, это потому, что ваш элемент управления теряет свою логическую направленность. У нескольких элементов управления есть возможность иметь логический фокус в одно и то же время. Таким простым решением для этого может быть предоставление ListBox FocusScope через FocusManager.
<ListBox SelectionMode="Multiple" FocusManager.IsFocusScope="True"></ListBox>