Abrufen oder Festlegen des Hauptanwendungsfensters (WPF .NET)

In diesem Artikel erfahren Sie, wie Sie das Hauptanwendungsfenster für Windows Presentation Foundation (WPF) abrufen oder festlegen. Das erste Window, das in einer WPF-Anwendung instanziiert wird, wird automatisch von Application als Hauptanwendungsfenster festgelegt. Auf das Hauptfenster wird mit der Application.MainWindow-Eigenschaft verwiesen.

In den meisten Fällen legt eine Projektvorlage Application.StartupUri auf eine XAML-Datei innerhalb Ihrer Anwendung fest, z. B. _Window1.xaml_. Dies ist das erste Fenster, das von Ihrer Anwendung instanziiert und angezeigt und zum Hauptfenster wird.

Tipp

Standardmäßig wird eine Anwendung heruntergefahren, wenn das letzte Fenster geschlossen wird. Dieses Verhalten wird von der Application.ShutdownMode-Eigenschaft gesteuert. Stattdessen können Sie die Anwendung so konfigurieren, dass sie heruntergefahren wird, wenn MainWindow geschlossen wird. Legen Sie Application.ShutdownMode auf OnMainWindowClose fest, um dieses Verhalten zu aktivieren.

Festlegen des Hauptfensters in XAML

Die Vorlagen, die Ihre WPF-Anwendung generieren, legen die Application.StartupUri-Eigenschaft normalerweise auf eine XAML-Datei fest. Diese Eigenschaft ist hilfreich, da:

  1. sie einfach gegen eine andere XAML-Datei in Ihrem Projekt getauscht werden kann.
  2. das angegebene Fenster automatisch instanziiert und angezeigt wird.
  3. Das angegebene Fenster zum Application.MainWindow wird.
<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>

Anstatt Application.StartupUri zu verwenden, können Sie Application.MainWindow auf ein mit XAML deklariertes Fenster festlegen. Das hier angegebene Fenster wird jedoch nicht angezeigt, und Sie müssen seine Sichtbarkeit festlegen.

<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>

Achtung

Wenn Sie sowohl die Application.StartupUri-Eigenschaft als auch die Application.MainWindow-Eigenschaft festlegen, werden beim Start Ihrer Anwendung beide Fenster angezeigt.

Sie können auch das Application.Startup-Ereignis verwenden, um ein Fenster zu öffnen. Weitere Informationen finden Sie unter Verwenden des Startup-Ereignisses zum Öffnen eines Fensters.

Festlegen des Hauptfensters im Code

Das erste von Ihrer Anwendung instanziierte Fenster wird automatisch das Hauptfenster und auf die Application.MainWindow-Eigenschaft festgelegt. Um ein anderes Hauptfenster festzulegen, ändern Sie diese Eigenschaft in ein Fenster:

Application.Current.MainWindow = new Window2();

Application.Current.MainWindow.Show();
Application.Current.MainWindow = New Window2()

Application.Current.MainWindow.Show()

Wenn Ihre Anwendung noch keine Instanz eines Fensters erstellt hat, ist der folgende Code funktional gleichwertig mit dem vorherigen Code:

var appWindow = new Window2();

appWindow.Show();
Dim appWindow As New Window2()

appWindow.Show()

Sobald die Fensterobjektinstanz erstellt ist, wird sie Application.MainWindow zugewiesen.

Abrufen des Hauptfensters

Sie können auf das als Hauptfenster gewählte Fenster zugreifen, indem Sie die Application.MainWindow-Eigenschaft überprüfen. Der folgende Code zeigt ein Meldungsfeld mit dem Titel des Hauptfensters an, wenn auf eine Schaltfläche geklickt wird:

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

Weitere Informationen