如何在 Window 的所有控件中监听键盘事件?

How can I listen to keyboard events in all controls of a Window?

我必须在 Window 中监听键盘事件,但如果我使用此代码:

 MyWindow.KeyDown += new KeyEventHandler(MainWindow_KeyDown);

我没有在文本框等其他控件中触发事件。如何从所有控件获取事件并停止将事件传播到其原始控件?

编辑

我试过这段代码:

EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new KeyEventHandler(MainWindow_KeyDown));

我适用于大多数情况,但例如当我在文本框内时它没有获得 HOME 键。

查看PreviewKeyDown:

this.PreviewKeyDown += MainWindow_PreviewKeyDown;

事件处理程序:

private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
     // do some stuff
     e.Handled = true // Stops propagating the event
}