在打开ContextMenu时驻留的控件的悬停效果

时间:2011-05-06 10:31:26

标签: wpf

我想为WPF-Control添加悬停效果。

为此,我创建了一个样式触发器,如果​​Background为真,则更改IsMouseOver - 控件的画笔。这样可以正常工作,但是如果我从控件中打开ContextMenu,则IsMouseOver会变为false,并且悬停效果会停止,直到ContextMenu关闭。

我还尝试了MouseEnterMouseLeave的组合,但有了这个,就会有相同的行为。如果打开上下文菜单,将触发MouseLeave。

我理解为什么我不能这样做,但我没有看到一个很好的方法来解决我的要求。有没有人做过这样的事情?

1 个答案:

答案 0 :(得分:3)

可以通过创建第二个触发器来解决问题,该触发器检查附加的ContextMenu是否已打开:

<Trigger Property="IsMouseOver" Value="True">
     <Setter Property="Background" Value="{StaticResource Hover_Brush}"/>                                            
</Trigger>
<DataTrigger Binding="{Binding ContextMenu.IsOpen,RelativeSource={RelativeSource Mode=Self}}" Value="True">
     <Setter Property="Background" Value="{StaticResource Hover_Brush}"/>
</DataTrigger>

<强>买者
上面的XAML工作正常,但有一个问题:如果样式用于多个项目并且共享控件ContextMenu,则如果为控件打开上下文菜单,将在所有项目上激活悬停效果。
因此,不得共享上下文菜单。如果在资源中定义,请使用x:Shared =“false”属性禁用共享。如果在控件下直接定义,则不会发生此问题。