2013-03-22 82 views
4

我有一個WPF項目,我使用了多個WPF窗口。 我的WPF Windows是:帶空引用異常的WPF項目

  • 主窗口
  • 窗口1
  • 登錄

我不得不案例場景中,第一個一切工作正常,但在第二次我得到一個空引用異常。

  1. 第一種方案: App.xaml中被配置成啓動窗口是MainWindow

當用戶點擊按鈕,主窗口他窗口1被轉發了,我有以下代碼:

MainWindow obj=(MainWindow)Application.Current.MainWindow; 
private void button1_Click(object sender, RoutedEventArgs e) 
     { 
     obj.checkBox1.IsChecked = false; 
     } 

2.Second方案: 的App.xaml配置以便登錄啓動窗口窗口。 代碼在登錄:

private void button1_Click(object sender, RoutedEventArgs e) 
     { 
     var window=new MainWindow(); 
     window.Show(); 
     this.Close(); 
     } 

在這種情況下,當我在窗口1單擊按鈕,一個空引用異常被拋出OBJ。

這兩種情況下MainWindow的初始化有什麼不同,導致第二種情況下的異常,我該如何克服它?

回答

5

那麼,第一個Window在您啓動應用程序時打開,將成爲您撥打Application.Current.MainWindow時返回的窗口。

在你的情況,這是Login,但在Window1你期望它是MainWindow,這是錯誤的。由於Login已關閉,因此返回null,應用程序崩潰。

爲了解決這個問題,你必須做出MainWindow的主窗口:-)

你可以做,在Login像這樣:

var window = new MainWindow(); 
Application.Current.MainWindow = window; 
window.Show(); 
this.Close(); 
+0

我認爲這樣可以解決我的問題。等到明天的時候我會回去工作測試它,並且只要問題解決了,我會接受您的答案...謝謝您的回覆 – apomene 2013-03-26 16:26:35

+0

它的工作原理...謝謝 – apomene 2013-03-27 11:14:33

0

您在場景2中的登錄窗口中的this.Close()將關閉應用程序,因爲這是作爲啓動窗口在app.xaml文件中指向的窗口。請參閱MainWindow property

MainWindow會自動設置爲引用要在AppDomain中實例化的第一個Window對象。

在第一種情況下,您不關閉MainWindow,以便應用程序繼續。在第二個關閉登錄窗口,以便應用程序退出。

在第一種情況下,您不會顯示用戶轉發到window1的位置。看到該代碼也是有幫助的。

+0

this.Close()關閉登錄窗口 – apomene 2013-03-22 19:25:54

+0

我已經有在顯示第二個窗口之前關閉第一個窗口的問題,導致應用程序關閉。兩個選項可以避免我使用過的這種行爲。 1)將Application.ShutdownMode屬性更改爲OnExplicitShutdown。 2)在調用第一個窗口上的Close()的新窗口上調用Show()之後,使用Dispatcher.BeginInvoke()在低優先級上排隊一個委託。 – Steve 2013-03-22 20:53:22