共用方式為


如何取得或設定主應用程式視窗 (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 檔案。 此屬性很有用,因為:

  1. 可以輕鬆地變更為專案中的不同 XAML 檔案。
  2. 自動具現化並顯示指定的視窗。
  3. 指定的視窗會變成 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.StartupUriApplication.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

另請參閱