如何将事件处理程序(如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
}
}
这将处理应用程序中任何Window
的KeyDown
事件。您可以将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或类似情况下)使用一些全局";事件捕获";(就像键盘上的这个)。