在WPF应用程序中我正在尝试绑定一个Command以使用快捷键在应用程序的任何位置启动计算器工具表单,我创建了一个命令,但没有获得如何映射命令和快捷键以创建通用快捷键我的应用程序。 提前谢谢。
答案 0 :(得分:6)
您可以在xaml中执行此操作 - 请参阅KeyBinding类文档中的示例:
<Window.InputBindings>
<KeyBinding Command="ApplicationCommands.Open"
Gesture="CTRL+R" />
</Window.InputBindings>
更新:如果您使用MVVM,看起来实际上无法使用xaml将KeyBinding绑定到ViewModel:请参阅此处Keybinding a RelayCommand。
答案 1 :(得分:3)
在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()