Я пытаюсь изменить свойство 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>
Я ожидал бы, что у невыбранных элементов будет светло-синий фон, зависание элементов (т.е. когда курсор мыши над ними) будет желтым, а выбранные элементы будут красными.
Для невыделенных и зависающих элементов это работает так, как ожидалось, но выбранные элементы по-прежнему имеют свой стандартный цвет фона (то есть синий, если в списке есть фокус и светло-серый в противном случае).
Есть ли что-то, что мне не хватает? Является ли это поведение документированным где-то?
Спасибо за любой намек!
ИЗМЕНИТЬ
Я знаю о решении переопределить цвета системы по умолчанию (как описано в Изменить выбранный и не сфокусированный стиль списка, чтобы не было выделено серым цветом, спасибо в любом случае для всех отправляя это как ответ). Однако я не хочу этого делать. Меня больше интересует, почему мое решение не работает.
Я подозреваю, что стандартный ControlTemplate
of ListItem
определяет его собственные триггеры, которые, как представляется, воспринимают триггеры, определенные стилем (возможно, кто-то может подтвердить это и указать мне на какой-то ресурс, где это поведение определено),
Мое решение тем временем - определить ControlTemplate
для моего ListItem
как:
<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>