c# WPF为窗口添加KeyUp事件,并在另一个页面中添加处理程序

本文关键字:添加 另一个 程序 处理 WPF 窗口 KeyUp 事件 | 更新日期: 2023-09-27 18:07:16

我正在做一个WPF项目,我是新手。我是这样组织我的项目的:

MainWindow.xaml         (Contains a NavigationWindow)
  MainWindow.xaml.cs
HomePage.xaml           (Contains a series of function)
  Homepage.xaml.cs

事情是,我想添加一个KeyUp事件到我的程序,我希望它调用一个函数在HomePage.xaml.cs当一个键被按下。但是我发现不可能将KeyUp事件添加到Page对象中,因此我决定为NavigationWindow添加它。然而,我无法在NavigationWindow中达到HomePage.xaml.cs中的功能,所以我想出了一个主意。

var window = Window.GetWindow(this);
((MainWindow) window).KeyUp += new system.Windows.Input.KeyEventHandler(this.Window_KeyUp);

然而,这不起作用,并抛出System.NullReferenceException。我不知道为什么会这样。也许它想说这里的thisnull ?但是为什么呢?

c# WPF为窗口添加KeyUp事件,并在另一个页面中添加处理程序

虽然这很愚蠢,但我想自己回答这个问题。(顺便说一句,我没有收到很多让我心烦的答案。幸运的是我找到了问题)

问题是关于Window.GetWindow(this)。它返回null,显然没有KeyUp事件。解决方案是将其更改为Application.Current.Windows,这是一个windows层次结构数组。因此,Application.Current.Windows[0]可以返回MainWindow对象,该对象可以与处理程序附加。