Подтвердить что ты не робот

Измените выбранный и несфокусированный стиль списка, чтобы не было выделено серым цветом

У меня есть действительно простой WPF ListBox с SelectionMode, установленным в Multiple.

<ListBox SelectionMode="Multiple" />

Когда ListBox теряет фокус, очень сложно сказать, что было выбрано, потому что цвет выделения меняется с синего на светло-серый. Какой самый простой способ изменить это поведение, чтобы он оставался синим?

Я знаю, что это как-то связано со стилем ListItem, но я не могу найти, где.

Приветствия.

Similar: Цвет неактивного выбора WPF ListView

4b9b3361

Ответ 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>