WPF中的键盘快捷键

我知道使用_而不是&,我正在看的是所有的Ctrl +types的快捷键。

Ctrl + Z用于撤消, Ctrl + S用于保存等。

是否有一个“标准”的方式在WPF应用程序中实现这些? 或者是自己推出并将其连接到任何命令/控制的情况?

我了解标准的方法是创build命令,然后将它们的快捷键作为InputGestures添加到它们。 这使快捷键可以工作,即使他们没有连接到任何控件。 而且,由于菜单项可以理解键盘手势,所以如果将该命令挂接到菜单项,它们将自动在菜单项文本中显示快捷键。

A.创build静态属性来保存命令(最好是作为您为命令创build的静态类中的属性 – 但是对于简单的例子,只需在窗口.cs中使用静态属性):

public static RoutedCommand MyCommand = new RoutedCommand( ); 

B.添加应该调用方法的快捷键:

 MyCommand.InputGestures.Add( new KeyGesture( Key.S , ModifierKeys.Control )); 

C.创build指向你的方法来调用execute的命令绑定,把它们放在它应该为之工作的UI元素(例如窗口)和方法的命令绑定中:

 <Window.CommandBindings> <CommandBinding Command="{x:Static local:MyWindow.MyCommand}" Executed="MyCommandExecuted"/> </Window.CommandBindings> private void MyCommandExecuted( object sender, ExecutedRoutedEventArgs e ) { ... } 

我发现这正是我正在寻找与WPF中的键绑定有关的东西。

 <Window.InputBindings> <KeyBinding Modifiers="Control" Key="N" Command="{Binding CreateCustomerCommand}" /> </Window.InputBindings> 

http://joyfulwpf.blogspot.com/2009/05/mvvm-commandreference-and-keybinding.html

试试这个代码…

首先创build一个RoutedComand对象

  RoutedCommand newCmd = new RoutedCommand(); newCmd.InputGestures.Add(new KeyGesture(Key.N, ModifierKeys.Control)); CommandBindings.Add(new CommandBinding(newCmd, btnNew_Click)); 

这取决于你想在哪里使用这些。 TextBoxBase派生的控件已经实现了这些快捷方式。 如果你想使用自定义键盘快捷键,你应该看看命令和input手势。 这里是从开关代码: WPF教程 – 命令绑定和自定义命令的小教程

希望这可以帮助。

VB.Net:

 Public Shared SaveCommand_AltS As New RoutedCommand 

内部加载事件:

 SaveCommand_AltS.InputGestures.Add(New KeyGesture(Key.S, ModifierKeys.Control)) Me.CommandBindings.Add(New CommandBinding(SaveCommand_AltS, AddressOf Me.save)) 

不需要xaml。

希望这可以帮助。

为其他人logging这个答案,因为有一个很简单的方法来做到这一点很less被引用,并且根本不需要触摸XAML。

要链接键盘快捷方式,只需在Window构造函数中添加一个新的KeyBinding到InputBindings集合。 作为命令,传入你的任意命令类,实现ICommand。 对于执行方法,只需执行你所需要的任何逻辑。 在我下面的例子中,我的WindowCommand类接受一个委托,它将在被调用时执行。 当我构造新的WindowCommand来传递我的绑定时,我只是在我的初始化程序中指出了我希望WindowCommand执行的方法。

您可以使用此模式来创build自己的快捷键盘快捷键。

 public YourWindow() //inside any WPF Window constructor { ... //add this one statement to bind a new keyboard command shortcut InputBindings.Add(new KeyBinding( //add a new key-binding, and pass in your command object instance which contains the Execute method which WPF will execute new WindowCommand(this) { ExecuteDelegate = TogglePause //REPLACE TogglePause with your method delegate }, new KeyGesture(Key.P, ModifierKeys.Control))); ... } 

创build一个简单的WindowCommand类,它接受一个执行委托来触发设置的任何方法。

 public class WindowCommand : ICommand { private MainWindow _window; //Set this delegate when you initialize a new object. This is the method the command will execute. You can also change this delegate type if you need to. public Action ExecuteDelegate { get; set; } //You don't have to add a parameter that takes a constructor. I've just added one in case I need access to the window directly. public WindowCommand(MainWindow window) { _window = window; } //always called before executing the command, mine just always returns true public bool CanExecute(object parameter) { return true; //mine always returns true, yours can use a new CanExecute delegate, or add custom logic to this method instead. } public event EventHandler CanExecuteChanged; //i'm not using this, but it's required by the interface //the important method that executes the actual command logic public void Execute(object parameter) { if (ExecuteDelegate != null) { ExecuteDelegate(); } else { throw new InvalidOperationException(); } } } 

如何将该命令与MenuItem关联:

 <MenuItem Header="My command" Command="{x:Static local:MyWindow.MyCommand}"/>