WPF: Disparador para ListBoxItem.IsSelected não funciona para a propriedade Background
Tento alterar oBackground
propriedade para o meuListBoxItem
s usando gatilhos noItemContainerStyle
do meuListBox
do seguinte modo
<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>
Espero que os itens não selecionados tenham um plano de fundo azul claro, os itens pairados (ou seja, quando o cursor do mouse está sobre eles) sejam amarelos e os itens selecionados sejam vermelhos.
Para os itens não selecionados e pairados, isso está funcionando conforme o esperado, mas os itens selecionados ainda têm a cor de fundo padrão (ou seja, azul, se a caixa de listagem tiver foco e cinza claro, caso contrário).
Há algo que eu estou perdendo? Esse comportamento está documentado em algum lugar?
Obrigado por qualquer dica!
EDITA
Estou ciente da solução de substituir as cores padrão do sistema (conforme descrito emAltere o estilo de caixa de listagem selecionado e sem foco para não ficar acinzentado, obrigada mesmo assim por todos que postaram isso como resposta). No entanto, não é isso que eu quero fazer. Estou mais interessado em saber por que minha solução não funciona.
Estou suspeitando do padrãoControlTemplate
doListItem
definir seus próprios gatilhos que parecem ter precedência sobre os gatilhos definidos pelo estilo (talvez alguém possa confirmar isso e me indicar algum recurso em que esse comportamento seja definido
minha solução, entretanto, é definir umControlTemplate
para o meuListItem
s como:
<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>