如何在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事件。您可以将e转换为KeyEventArgs,以获取有关按键的信息。

这个怎么样:

 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或类似情况下)使用一些全局";事件捕获";(就像键盘上的这个)。

相关内容

  • 没有找到相关文章

最新更新