创建快捷键以调用方法

时间:2014-04-07 21:33:47

标签: c# wpf keyboard-shortcuts

我希望我可以定义任何类型的快捷键,例如 Ctrl + F Ctrl + P Ctrl + Alt + Tab 来调用方法。我尝试使用CommandBindingKeyBinding但没有成功。如果我没有错,唯一的方法是使用CanExecuteExecuted CommandBinding来执行此操作,但我不知道如何将其与任何自定义快捷方式相关联想要,并且有必要定义Command,例如ApplicationCommands.Open

如果我可以使用命令Key="B"简单地定义Modifiers="Control"Command="SomeEventHandlerHere"这样的快捷方式,那将是完美的,但不幸的是,它并不那么简单。

修改

到目前为止我已经尝试过了(即使对我来说看起来也错了):

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
}

1 个答案:

答案 0 :(得分:0)

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

为了创建我自己的命令(而不是使用预先存在的命令,如" Open"," Help"," Save"等),我需要创建一个新的RoutedUICommand。接下来,我们创建一个CommandBinding来将Command与方法相关联。

<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 StackOverflow