WPF中的应用程序级快捷键

时间:2009-08-23 20:07:51

标签: .net wpf windows keyboard-shortcuts commandbinding

在WPF应用程序中我正在尝试绑定一个Command以使用快捷键在应用程序的任何位置启动计算器工具表单,我创建了一个命令,但没有获得如何映射命令和快捷键以创建通用快捷键我的应用程序。 提前谢谢。

2 个答案:

答案 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()