IsMouseOver与ListViewItem的IsSelected重叠

时间:2012-02-09 15:10:03

标签: wpf

我为模板化的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)? 感谢。

3 个答案:

答案 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)

您不应在非独占属性IsSelectedIsMouseOver的触发器中设置Background属性,从而产生不明确的值。

相反,你可以在模板的所有其他控件上放置一个带有Opacity="0"的Cornsilk色矩形,并在IsMouseOver触发器中将Rectangle的Opacity设置为例如IsSelected。 0.5。因此,您可以同时显示两种状态,因为您仍然可以通过半透明IsMouseOver矩形看到{{1}} - 彩色背景。