Come ottenere o impostare la finestra principale dell'applicazione (WPF .NET)

Questo articolo illustra come ottenere o impostare la finestra principale dell'applicazione per Windows Presentation Foundation (WPF). Il primo Window oggetto di cui viene creata un'istanza all'interno di un'applicazione WPF viene impostato Application automaticamente come finestra principale dell'applicazione. Viene fatto riferimento alla finestra principale con la Application.MainWindow proprietà .

Gran parte del tempo in cui un modello di progetto imposta su Application.StartupUri un file XAML all'interno dell'applicazione, ad esempio _Window1.xaml_. Si tratta della prima finestra creata e visualizzata dall'applicazione e diventa la finestra principale.

Suggerimento

Il comportamento predefinito per un'applicazione consiste nell'arrestare l'ultima finestra. Questo comportamento è controllato dalla Application.ShutdownMode proprietà . È invece possibile configurare l'applicazione per l'arresto se è MainWindow chiuso. Impostare Application.ShutdownMode su OnMainWindowClose per abilitare questo comportamento.

Impostare la finestra principale in XAML

I modelli che generano l'applicazione WPF impostano in genere la Application.StartupUri proprietà su un file XAML. Questa proprietà è utile perché:

  1. È facilmente modificabile in un file XAML diverso nel progetto.
  2. Crea automaticamente un'istanza e visualizza la finestra specificata.
  3. La finestra specificata diventa .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>

Invece di usare Application.StartupUri, puoi impostare su Application.MainWindow una finestra dichiarata da XAML. Tuttavia, la finestra specificata qui non verrà visualizzata ed è necessario impostarne la visibilità.

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

Attenzione

Se si impostano sia le Application.StartupUri proprietà che le Application.MainWindow proprietà , verranno visualizzate entrambe le finestre all'avvio dell'applicazione.

Inoltre, è possibile usare l'evento Application.Startup per aprire una finestra. Per altre informazioni, vedere Usare l'evento Startup per aprire una finestra.

Impostare la finestra principale nel codice

La prima finestra creata dall'applicazione diventa automaticamente la finestra principale e viene impostata sulla Application.MainWindow proprietà . Per impostare una finestra principale diversa, modificare questa proprietà in una finestra:

Application.Current.MainWindow = new Window2();

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

Application.Current.MainWindow.Show()

Se l'applicazione non ha mai creato un'istanza di una finestra, il codice seguente è funzionalmente equivalente al codice precedente:

var appWindow = new Window2();

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

appWindow.Show()

Non appena viene creata l'istanza dell'oggetto finestra, viene assegnata a Application.MainWindow.

Ottenere la finestra principale

È possibile accedere alla finestra scelta come finestra principale controllando la Application.MainWindow proprietà . Il codice seguente visualizza una finestra di messaggio con il titolo della finestra principale quando si fa clic su un pulsante:

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

Vedi anche