如何以编程方式向 WPF ContextMenu 添加访问键(快捷方式)?

Jor*_*ris 5 c# wpf menu shortcut

我已经有了以下内容:

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);
Run Code Online (Sandbox Code Playgroud)

这会导致我的上下文菜单显示退出菜单项,并带有下划线“x”。但是,按 x 没有任何作用。单击菜单项工作正常。

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

小智 3

添加快捷方式的常用方法如下:

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));
Run Code Online (Sandbox Code Playgroud)

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

但请注意,如果没有修饰符,您无法将快捷方式设置为 X。引用自MSDN

在大多数情况下,KeyGesture 必须与一个或多个 ModifierKey 关联。此规则的例外是功能键和数字键盘按键,它们本身可以是有效的 KeyGesture。例如,您可以仅使用 F12 键创建 KeyGesture,但要在 KeyGesture 中使用 X 键,它必须与修饰键配对。

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