C# 菜单项打开和关闭事件
每当菜单项的子菜单打开时,我想处理一个事件。结束时也一样。我怎样才能做到这一点呢?不确定您想要什么,但请查看C# 菜单项打开和关闭事件,c#,wpf,event-handling,wpf-controls,menuitem,C#,Wpf,Event Handling,Wpf Controls,Menuitem,每当菜单项的子菜单打开时,我想处理一个事件。结束时也一样。我怎样才能做到这一点呢?不确定您想要什么,但请查看ContextMenu和MenuItem的这些事件: 上下文菜单: MenuItem: 我认为ContextMenuOpening和ContextMenuClosing可能会很有趣;) 非常简单。订阅菜单项的子菜单打开事件。传统做法: MidItem.SubmenuOpened += new RoutedEventHandler(MidItem_SubmenuOpened); pri
ContextMenu
和MenuItem
的这些事件:
上下文菜单
:
MenuItem
:
我认为
ContextMenuOpening
和ContextMenuClosing
可能会很有趣;) 非常简单。订阅菜单项
的子菜单打开
事件。传统做法:
MidItem.SubmenuOpened += new RoutedEventHandler(MidItem_SubmenuOpened);
private void MidItem_SubmenuOpened(object sender, RoutedEventArgs e)
{
//Menu Open Logic Here
}
或者采用冷静的动态方法:
MidItem.SubmenuOpened += delegate(object sender, RoutedEventArgs e)
{
//Menu Open Logic Here
};
如果希望在实际打开之前打开,可以将menuitem子类化
Imports System.ComponentModel
Public Class CustomMenuItem
Inherits MenuItem
Public Event SubMenuOpening(sender As Object, e As CancelEventArgs)
Public Event SubMenuClosing(sender As Object, e As CancelEventArgs)
Protected Overrides Sub OnPropertyChanged(e As DependencyPropertyChangedEventArgs)
If e.Property Is MenuItem.IsSubmenuOpenProperty Then
Dim MyCancelEventArgs As New CancelEventArgs
If e.NewValue Then
RaiseEvent SubMenuOpening(Me, MyCancelEventArgs)
If MyCancelEventArgs.Cancel Then Me.IsSubmenuOpen = False
Else
RaiseEvent SubMenuClosing(Me, MyCancelEventArgs)
If MyCancelEventArgs.Cancel Then Me.IsSubmenuOpen = True
End If
End If
MyBase.OnPropertyChanged(e)
End Sub
End Class
我知道这是VB,但它很容易转换。
另外,使用CancelEventArgs,您可以模拟取消打开(或关闭)。问题是,它们仅在菜单/上下文菜单实际打开时才会触发。在某些情况下,您可能还希望检查它应该在何时打开(例如,当上一个菜单打开时,主菜单悬停在其上方),而这些事件不会捕获该事件。不幸的是,我认为除了完全重写控件行为之外,没有办法处理这些事件