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
。我不知道为什么会这样。也许它想说这里的this
是null
?但是为什么呢?
虽然这很愚蠢,但我想自己回答这个问题。(顺便说一句,我没有收到很多让我心烦的答案。幸运的是我找到了问题)
问题是关于Window.GetWindow(this)
。它返回null
,显然没有KeyUp
事件。解决方案是将其更改为Application.Current.Windows
,这是一个windows层次结构数组。因此,Application.Current.Windows[0]
可以返回MainWindow
对象,该对象可以与处理程序附加。