我正在尝试提出一种解决方案来创建可以在运行时生成的动态上下文菜单。我已经实现了一个IGuiCommand
接口,它实现了类似于普通命令模式的东西。
interface IGuiCommand
{
Execute();
Undo();
bool CanUndo {get;set;}
Redo();
string CommandName {get;set;}
string CommandDescription {get;set;}
}
这个想法是允许右键单击的控件提交它自己的命令列表以显示在给定的上下文菜单中。
虽然我可以让每个控件构建一个上下文菜单,但我更喜欢使用单个上下文菜单并动态生成菜单,以便在运行时更轻松地进行管理。当控件状态或应用程序状态发生变化时,我希望上下文菜单能够反映这种变化。例如,如果我右键单击一个复选框,则该复选框将根据复选框的当前 Checked 值向上下文菜单提交启用或禁用命令以显示。
我想如果我有办法知道哪个控件是“右键单击”以便为该特定控件调出上下文菜单,我可以轻松地实现这一点。
令人惊讶的是,ContextMenu
事件没有提供EventArg
指示右键单击的控件(或任何会导致上下文菜单弹出的命令)