7

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

4

5 回答 5

12

在您的应用程序类 (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
    }
}

这将处理您应用程序KeyDown中任何事件的事件。Window您可以投射eKeyEventArgs以获取有关按下的键的信息。

于 2012-04-05T11:05:42.443 回答
3

这个怎么样:

 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) {

        }
    }
于 2012-04-05T11:09:09.937 回答
0

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

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

mzE。

于 2012-04-05T10:54:23.843 回答
0

好吧,KeyDown仅在当前窗口中有效,因为您需要将焦点放在KeyDown. 您可以做的是向所有窗口添加一个处理程序并在这些处理程序中调度另一个事件,然后使用这个新事件注册您需要的所有类。

或者,看看Observer模式

于 2012-04-05T10:54:34.413 回答
0

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

于 2012-04-05T10:54:44.980 回答