2016-09-17 79 views
0

我正在開發一個WPF項目,但我對此很陌生。我整理我的項目是這樣的:C#WPF在另一個頁面中爲處理窗口添加KeyUp事件

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?但爲什麼?

+0

使用'UserControl'而不是'Page'。 (如果可能的話) – DeMama

+0

我想'UserControl'仍然不能附加'KeyUp'事件。另外,傳統上使用'UserControl'而不是'Page'來做導航並在其中放置內容? – Rundis

+0

我猜你想在MainWindow中顯示差異頁面。 HomePage是第一頁,可能有很多這樣的頁面,並且您想使用箭頭鍵在它們之間導航? – AnjumSKhan

回答

0

雖然很愚蠢,但我想自己回答這個問題。 (順便說一下,我沒有收到太多令我不安的答案,幸運的是我發現了這個問題)

問題是關於Window.GetWindow(this)。它返回null,這顯然沒有KeyUp事件。解決方法是將其更改爲Application.Current.Windows,這是一個Windows層次結構數組。因此Application.Current.Windows[0]可以返回MainWindow對象,該對象可以與處理程序連接。

相關問題