c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?

我已经有以下内容:

var myContextMenu = new System.Windows.Controls.ContextMenu();

var exitItem = new MenuItem();
exitItem.Header = "E_xit";
exitItem.Item.Click += new RoutedEventHandler(new System.EventHandler(ExitProgram));
myContextMenu.Items.Add(exitItem);

这会导致我的上下文菜单显示Exit菜单项,带有带下划线的“x”.但是,按x不会做任何事情.单击菜单项工作正常.

如何将事件与x键关联?请注意,这必须在我的上下文中以编程方式完成.我不能在前面的XAML中编写这个解决方案.

最佳答案 添加快捷方式的常用方法如下:

var exitCommand = new RelayCommand(_ => ExitProgram());
        var exitItem = new MenuItem(); 
        exitItem.Header = "E_xit";
        exitItem.Command = exitCommand;
        myContextMenu.Items.Add(exitItem);

        InputBindings.Add(new KeyBinding(exitCommand, new KeyGesture(Key.X, ModifierKeys.Alt));

RelayCommand
这里使用的类不是WPF的一部分,但它广泛用于基于MVVM的应用程序.

但请注意,您无法在没有修改器的情况下将快捷方式设置为X.
引自MSDN

In most cases, a KeyGesture must be associated with one or more
ModifierKeys. The exceptions to this rule are the function keys and
the numeric keypad keys, which can be a valid KeyGesture by
themselves. For example, you can create a KeyGesture by using only the
F12 key, but to use the X key in a KeyGesture it must be paired with a
modifier key.

如果由于某种原因你需要使用X w / o修饰符 – 你将不得不处理键盘事件(例如KeyDown)并做出相应的反应

点赞