创建快捷方式键以调用方法

本文关键字:调用 方法 快捷方式 创建 | 更新日期: 2023-09-27 17:57:18

我希望我可以定义任何类型的快捷方式,如Ctrl + F,Ctrl +P,Ctrl +Alt + Tab来调用方法。我试图使用CommandBindingKeyBinding,但没有任何成功。如果我没错的话,唯一的方法是使用 CommandBindingCanExecuteExecuted来做到这一点,但我不知道如何将其与我想要的任何自定义快捷方式相关联,并且有必要定义Command,例如,ApplicationCommands.Open .

如果我能简单地使用命令Command="SomeEventHandlerHere"定义Key="B"Modifiers="Control"等快捷方式,那就完美了,但不幸的是,事情并没有那么简单。

编辑

到目前为止我已经尝试过这个(即使对我来说看起来也很不对劲):

CommandBinding cb = new CommandBinding(ApplicationCommands.NotACommand, MyMethod);
KeyGesture kg = new KeyGesture(Key.B, ModifierKeys.Control);
KeyBinding kb = new KeyBinding(ApplicationCommands.NotACommand, kg);
this.InputBindings.Add(kb);
private void MyMethod(object sender, ExecutedRoutedEventArgs e)
{
    // Do something
}

创建快捷方式键以调用方法

我刚刚找到了我想要的东西。

为了创建我自己的命令(而不是使用预先存在的命令,如"打开","帮助","保存"等),我需要创建一个新的RoutedUICommand。接下来,我们创建一个命令绑定以将命令与方法相关联。

<Window.Resources>
    <RoutedUICommand x:Key="MyCustomCommand"/>
</Window.Resources>
<Window.CommandBindings>
    <CommandBinding Command="{StaticResource MyCustomCommand}" Executed="CommandExecutedMethod" CanExecute="CommandCanExecuteMethod"/>
</Window.CommandBindings>  

在后面的代码中,我们有:

private void CommandCanExecuteMethod(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = true;
    e.Handled = true;
}
private void CommandExecutedMethod(object sender, ExecutedRoutedEventArgs e)
{
    MessageBox.Show("Command executed");
    e.Handled = true;
}  

现在我可以做我想要的:

<Window.InputBindings>
    <KeyBinding Key="G" Modifiers="Control" Command="{StaticResource MyCustomCommand}"/>
</Window.InputBindings>

如上所述,如果窗口聚焦,当我们按 Ctrl + G 时,将调用方法 CommandExecutedMethod

我们也可以像这样使用命令:

<Button Content="Click me" Command="{StaticResource MyCustomCommand}" />  

字体:Tech.Pro堆栈溢出