C#WPF为另一个页面中的处理程序添加了窗口的KeyUp事件

时间:2016-09-17 03:14:54

标签: c# wpf xaml

我正在开发一个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。但是,我无法在HomePage.xaml.cs NavigationWindow内找到该功能,所以我提出了一个想法。

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

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

1 个答案:

答案 0 :(得分:0)

虽然很傻,但我想自己回答这个问题。 (顺便说一句,我还没有收到很多让我感到不安的答案。幸运的是我发现了问题)

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