如何取得或設定主應用程式視窗 (WPF .NET)
本文會教導您如何取得或設定 Windows Presentation Foundation (WPF) 的主應用程式視窗。 在 WPF 應用程式中具現化的第一個 Window 會被 Application 自動設定為主應用程式視窗。 主視窗會使用 Application.MainWindow 屬性來參考。
專案範本大部分時間都會將 Application.StartupUri 設定為應用程式中的 XAML 檔案,例如 _Window1.xaml_。 這是應用程式具現化並顯示的第一個視窗,而且它會變成主視窗。
提示
應用程式的預設行為是關閉最後一個視窗時關閉。 行為是由 Application.ShutdownMode 屬性控制的。 相反地,如果關閉 MainWindow,您可以將應用程式設定為關閉。 將 Application.ShutdownMode 設定為 OnMainWindowClose,以啟用此行為。
在 XAML 中設定主視窗
產生 WPF 應用程式的範本通常會將 Application.StartupUri 屬性設定為 XAML 檔案。 此屬性很有用,因為:
- 可以輕鬆地變更為專案中的不同 XAML 檔案。
- 自動具現化並顯示指定的視窗。
- 指定的視窗會變成 Application.MainWindow。
<Application x:Class="MainApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MainApp"
StartupUri="Window1.xaml">
</Application>
您可以不要使用 Application.StartupUri,而是將 Application.MainWindow 設定為 XAML 宣告的視窗。 不過,此處指定的視窗將不會顯示,而且您必須設定其可見性。
<Application x:Class="MainApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MainApp">
<Application.MainWindow>
<local:Window2 Visibility="Visible" />
</Application.MainWindow>
</Application>
警告
如果您同時設定 Application.StartupUri 和 Application.MainWindow 屬性,則會在應用程式啟動時顯示這兩個視窗。
您也可以使用 Application.Startup 事件來開啟視窗。 如需詳細資訊,請參閱使用 Startup 事件開啟視窗。
在程式碼中設定主視窗
應用程式具現化的第一個視窗會自動成為主視窗,並設定為 Application.MainWindow 屬性。 若要設定不同的主視窗,請將此屬性變更為視窗:
Application.Current.MainWindow = new Window2();
Application.Current.MainWindow.Show();
Application.Current.MainWindow = New Window2()
Application.Current.MainWindow.Show()
如果您的應用程式從未建立視窗的執行個體,下列程式碼的功能相當於先前的程式碼:
var appWindow = new Window2();
appWindow.Show();
Dim appWindow As New Window2()
appWindow.Show()
一旦建立視窗物件執行個體,就會將其指派給 Application.MainWindow。
取得主視窗
您可以藉由檢查 Application.MainWindow 屬性,存取選擇為主視窗的視窗。 下列程式碼會在按一下按鈕時,顯示主視窗標題的訊息方塊:
private void Button_Click(object sender, RoutedEventArgs e) =>
MessageBox.Show($"The main window's title is: {Application.Current.MainWindow.Title}");
Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
MessageBox.Show($"The main window's title is: {Application.Current.MainWindow.Title}")
End Sub