2010-07-22 90 views
3

我有這一小段代碼。在Application_Startup中顯示窗口。 Wpf

private void Application_Startup(object sender, StartupEventArgs e) 
     { 
      WndAbout ab = new WndAbout(); 
      ab.Show(); 
     } 

並希望在應用程序啓動時顯示窗口或對話框,然後才能加載其他模塊。

但是!當我關閉顯示窗口時,稍後啓動的主窗口也會關閉!

我在做什麼錯?我試圖讓Showdialog() - 發生同樣的情況。

回答

6

您遇到的問題來自於WPF管理關機的方式。

您可以通過...

Application.Current.ShutdownMode 

更改關機行爲 ...財產。將其更改爲approriate值:

Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnLastWindowClose; 

這將幫助。

另一種方法是手動將MainWindow屬性設置爲您的第二個窗口。

如果您只想製作閃屏,請使用自.NET 3.51起可用的splashscreen選項。 IT的優勢在於,它可以在應用程序加載序列的早期階段加載,早於窗口即可加載。

要做到這一點,打開您的項目資源管理器的圖像的屬性選項卡,並設置生成操作閃屏


更新

在一個我應用程序我有一個設計,在顯示主窗口之前還必須顯示模態對話框。此時我並不知道ShutdownMode-property。

我做的是我第一次開始Window,這是用戶不可見的。這是第一個窗口,它也控制了app-livetime(WPF的默認行爲)。從這個窗口中,我打開了所需的對話框(一個顯示模式的窗口)。如果此對話框已完成不成功,我終止了隱藏窗口並完全關閉應用程序。如果對話結果正常,我創建了第一個MainWindow實例,用戶可以使用它。

+0

不,沒有幫助。但看來,我排除了這種情況。我隱藏窗口,它有助於某種原因。 – 2010-07-23 09:00:21

+0

我認爲你必須刪除StartupURI並手動打開表單。然而你所描述的也是一種可能的方式(我也用它來解決類似的問題)。但只是作爲一個建議,如果你唯一的願望是顯示關於應用程序啓動的信息,請考慮使用splash-screen-option。它在應用程序開始時顯示,在加載fat程序集之前,因此它的使用會爲您的應用程序帶來更好的用戶體驗。 – HCL 2010-07-23 09:50:58

+0

不,關於對話框只是一個例子,抱歉有誤導性。它將是LogonDialog。 – 2010-07-23 10:12:04

2
private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    ShutdownMode mode = this.ShutdownMode; 
    this.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown; 
    YourLogonWnd logon = new YourLogonWnd(); 
    logon.ShowDialog(); 
    if (!logon.DialogResult.HasValue || !logon.DialogResult.Value) 
    this.Shutdown(); 
    else 
    this.ShutdownMode = mode; 
} 

事實上,「OnMainWindowClose」是更好的在事件處理結束使用。

+0

這對我有用。謝謝。 – Michael 2011-07-19 04:47:20