trato de cambiar la propiedad Background
para mis ListBoxItem
s utilizando factores desencadenantes en el ItemContainerStyle
de mi ListBox
de la siguiente manera:WPF: ¿se ListBoxItem.IsSelected que no trabaja para propiedad Background
<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>
Yo esperaría a los elementos no seleccionados tiene un fondo azul claro, los elementos al revés (es decir, cuando el cursor del mouse está sobre ellos) son amarillos y los elementos seleccionados son rojos.
Para los elementos no seleccionados y suspendidos, funciona como se esperaba, pero los elementos seleccionados siguen teniendo su color de fondo estándar (es decir, azul, si el cuadro de lista tiene el foco y gris claro en caso contrario).
¿Hay algo que me falta? ¿Este comportamiento está documentado en alguna parte?
¡Gracias por cualquier pista!
EDITAR
Soy consciente de la solución de anular el sistema de colores por defecto (como se describe en Change selected and unfocused Listbox style to not be grayed out, gracias de todos modos para todo el mundo publicar esto como una respuesta). Sin embargo, esto no es lo que quiero hacer. Estoy más interesado en por qué mi solución no funciona.
Estoy sospechando el estándar ControlTemplate
de ListItem
para definir su propio desencadenantes que parecen tener prioridad sobre las disparadores definidos por el estilo (tal vez alguien podría confirmar esto y me señale algún recurso donde se define este comportamiento).
Mi solución para el medio tiempo es definir un ControlTemplate
para mis ListItem
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>
en este sentido, usted utiliza la solución correcta todavía. No hay solución con ControlTemplate estándar y sin sobreimpresión de pincel. – Sonorx