2011-05-06 48 views
4

我想爲WPF控件添加懸停效果。如果打開ContextMenu,則駐留的控件的懸停效果

爲此,我創建了一個樣式觸發器,用於在IsMouseOver爲真時更改Background控件的刷新。這工作正常,但是,如果我從控件打開ContextMenuIsMouseOver將變爲false,懸停效果將停止,直到ContextMenu關閉。

我也嘗試過MouseEnterMouseLeave的組合,但是有了這個,就有相同的行爲。如果打開上下文菜單,MouseLeave將被觸發。

我明白爲什麼我不能這樣做,但我沒有看到一個很好的方式來解決我的要求。有沒有人有過這樣的事情?

回答

3

的問題可以通過增設第二個觸發的,如果附加文本菜單打開時,檢查解決:

<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」屬性禁用共享。如果直接在控制下定義,則不會發生此問題。