WPF中的应用程序级别快捷键

在WPF应用程序中,我目前正试图绑定一个命令来启动一个计算器工具窗体,在应用程序的任何地方使用快捷键,我已经创build了一个命令,但没有得到如何映射命令和快捷键来在我的应用程序中创build通用的快捷键。 提前致谢。

Solutions Collecting From Web of "WPF中的应用程序级别快捷键"

CommandManager希望使用聚焦控件作为路由所有输入绑定的起点。

我写了一个行为,允许您使用RoutedCommand(标准WPF)和ICommand(MVVM样式)轻松地绑定全局快捷键。

WPF行为:全局应用程序快捷键

您可以在xaml中执行此操作 – 请参阅KeyBinding类文档中的示例:

<Window.InputBindings> <KeyBinding Command="ApplicationCommands.Open" Gesture="CTRL+R" /> </Window.InputBindings> 

更新:如果你正在使用MVVM,看起来你实际上不能使用xaml绑定一个KeyBinding到一个ViewModel:见这里键入一个RelayCommand 。

在WPF中,为了使用快捷方式,您需要关注各自的控制器。 但是使用InputManager可以捕获应用程序的各种输入。 在这里,您不需要专注于相应的控制器。

首先,你必须提交事件。

 InputManager.Current.PreProcessInput -= Current_PreProcessInput; InputManager.Current.PreProcessInput += Current_PreProcessInput; 

然后,

 private void Current_PreProcessInput(object sender, PreProcessInputEventArgs args) { try { if (args != null && args.StagingItem != null && args.StagingItem.Input != null) { InputEventArgs inputEvent = args.StagingItem.Input; if (inputEvent is KeyboardEventArgs) { KeyboardEventArgs k = inputEvent as KeyboardEventArgs; RoutedEvent r = k.RoutedEvent; KeyEventArgs keyEvent = k as KeyEventArgs; if (r == Keyboard.KeyDownEvent) { } if (r == Keyboard.KeyUpEvent) { } } } } catch (Exception ex) { } } 

像这样,你可以过滤出所有不需要的东西,并获得所需的输入。 由于这是一个快捷方式捕获应用程序,我只采取了KeyDown和KeyUp事件。

您也可以获得按下的所有按键的详细信息

 keyEvent.Key.ToString()