我正在尝试使用以下命令将键盘快捷键添加到我的xaml代码中的菜单项中

<MenuItem x:Name="Options" Header="_Options" InputGestureText="Ctrl+O" Click="Options_Click"/>


使用Ctrl + O

但是它不起作用-它没有调用Click选项。

有什么解决办法吗?

最佳答案

InputGestureText只是一个文本。它不会将密钥绑定到MenuItem


  此属性不会将输入手势与菜单项关联;它只是将文本添加到菜单项。应用程序必须处理用户的输入才能执行操作


您可以做的就是在窗口中用指定的输入手势创建RoutedUICommand

public partial class MainWindow : Window
{
    public static readonly RoutedCommand OptionsCommand = new RoutedUICommand("Options", "OptionsCommand", typeof(MainWindow), new InputGestureCollection(new InputGesture[]
        {
            new KeyGesture(Key.O, ModifierKeys.Control)
        }));

    //...
}


然后在XAML中将该命令绑定到针对MenuItem设置该命令的某种方法。在这种情况下,InputGestureTextHeader都将从RoutedUICommand中拉出,因此您无需将其设置为MenuItem

<Window.CommandBindings>
    <CommandBinding Command="{x:Static local:MainWindow.OptionsCommand}" Executed="Options_Click"/>
</Window.CommandBindings>
<Menu>
    <!-- -->
    <MenuItem Command="{x:Static local:MainWindow.OptionsCommand}"/>
</Menu>

08-26 16:33
查看更多