大部分的时候,当我们需要键盘事件的时候,可以通过在主窗口注册KeyBinding来实现,不过,有的时候我们需要的是全局键盘事件,想在任何一个地方都能使用,最开始的时候我是通过键盘钩子来实现的, 不过键盘钩子这种DLL调用的方式怎么都看着不大爽,这里介绍一种通过EventManager快速实现键盘事件感知的例子。
public class KeyboardEvents { public static event Action<KeyEventArgs> OnKeyDown; static KeyboardEvents() { EventManager.RegisterClassHandler(typeof(Window), UIElement.KeyDownEvent, (KeyEventHandler)onKeyDown); } private static void onKeyDown(object sender, KeyEventArgs e) { if (OnKeyDown != null) OnKeyDown(e); } }
这里只是一个简单的例子,要实现键盘输入拦截也可以用这种方式实现,感知PreviewKeyDownEvent即可,这里就不多介绍了