我为模板化的listboxitem定义了样式(这是它的一部分):
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="Azure"/>
<Setter TargetName="Border" Property="Height" Value="Auto"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="Cornsilk"/>
</Trigger>
</ControlTemplate.Triggers>
不幸的是,当我选择一些项目时,它仍然是IsMouseOver定义它。我必须将鼠标从包装盒中移出才能成为Azure。可能是缺少什么?也许有一种方法可以使某种风格成为压倒一种(IsSelected)? 感谢。
答案 0 :(得分:2)
颠倒触发器的顺序。当两个条件相同时,只应用最后一个条件。
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="Cornsilk"/>
</Trigger>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="Azure"/>
<Setter TargetName="Border" Property="Height" Value="Auto"/>
</Trigger>
</ControlTemplate.Triggers>
答案 1 :(得分:1)
实际上我是通过使用MultiTriggers而不是触发器实现的。
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedListboxItem}"/>
<Setter TargetName="Border" Property="Height" Value="Auto"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="Border" Property="Background" Value="{StaticResource HoveredListboxItem}"/>
</MultiTrigger>
答案 2 :(得分:0)
您不应在非独占属性IsSelected
和IsMouseOver
的触发器中设置Background属性,从而产生不明确的值。
相反,你可以在模板的所有其他控件上放置一个带有Opacity="0"
的Cornsilk色矩形,并在IsMouseOver
触发器中将Rectangle的Opacity
设置为例如IsSelected
。 0.5。因此,您可以同时显示两种状态,因为您仍然可以通过半透明IsMouseOver
矩形看到{{1}} - 彩色背景。