Я пытаюсь изменить свойство Background
для моих ListBoxItem
с помощью триггеров в ItemContainerStyle
моего ListBox
следующим образом:
<ListBox Height="100" HorizontalAlignment="Left" Margin="107,59,0,0" Name="listBox1" VerticalAlignment="Top" Width="239">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Lightblue"/>
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="Red"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="Yellow"/>
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.Items>
<ListBoxItem Content="First Item"/>
<ListBoxItem Content="SecondItem"/>
<ListBoxItem Content="Third Item"/>
</ListBox.Items>
</ListBox>
Я бы ожидал, что невыбранные элементы будут иметь светло-синий фон, элементы наведения (то есть, когда курсор мыши над ними) будет желтым, а выбранные элементы - красным.
Для невыбранных и всплывающих элементов это работает должным образом, но выбранные элементы по-прежнему имеют свой стандартный цвет фона (то есть синий, если список имеет фокус и светло-серый в противном случае).
Есть что-то, что я пропускаю? Задокументировано ли это поведение где-нибудь?
Спасибо за любую подсказку!
EDIT
Мне известно о решении переопределения системных цветов по умолчанию (как описано в Измените выбранный и не сфокусированный стиль списка, чтобы он не был серым , в любом случае спасибо всем, кто опубликовал это как ответ). Однако это не то, что я хочу сделать. Меня больше интересует, почему мое решение не работает.
Я подозреваю, что стандартный ControlTemplate
из ListItem
определяет его собственные триггеры, которые, кажется, имеют приоритет над триггерами, определенными стилем (возможно, кто-то мог бы подтвердить это и указать мне на некоторый ресурс, где это поведение определено) ,
Тем временем мое решение состоит в том, чтобы определить ControlTemplate
для моих ListItem
s как:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border" Padding="2" SnapsToDevicePixels="true" Background="LightBlue" Margin="0">
<ContentPresenter/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>