如何在WPF中将evenHandler设置为所有窗口(整个应用程序)?

如何将事件处理程序(如keydown )设置为整个解决方案,而不是单个窗口?

在应用程序类(App.cs)中注册一个全局事件处理程序,如下所示:

 public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(Window_KeyDown)); } void Window_KeyDown(object sender, RoutedEventArgs e) { // your code here } } 

这将处理应用中任何WindowKeyDown事件。 您可以将eKeyEventArgs以获取有关按下的键的信息。

这个怎么样:

  public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { EventManager.RegisterClassHandler(typeof(Window), Window.KeyDownEvent, new RoutedEventHandler(KeyDown)); base.OnStartup(e); } void KeyDown(object sender, RoutedEventArgs e) { } } 

您应该使用委托来连接事件(无论它在哪里)以及您在事件跳转时愿意工作的函数。

您可以根据需要向委托加载任意数量的事件。

MZE。

好吧, KeyDown只能在当前窗口中工作,因为你需要专注于KeyDown 。 您可以做的是向所有窗口添加处理程序并在这些处理程序中分派另一个事件,然后使用此新事件注册所需的所有类。

或者,看一下Observer模式

你不能。
你在所有窗口中注册事件并将其传递给全局函数/事件或者(在keydown或类似情况下)你使用一些全局“事件捕获”(如键盘的THIS )。