Obtención o establecimiento de la ventana principal de la aplicación (WPF .NET)

En este artículo se explica cómo obtener o establecer la ventana principal de la aplicación para Windows Presentation Foundation (WPF). La primera Window instancia de dentro de una aplicación WPF se establece automáticamente mediante Application como la ventana principal de la aplicación. Se hace referencia a la ventana principal con la propiedad Application.MainWindow.

Gran parte del tiempo una plantilla de proyecto establecerá el Application.StartupUri en un archivo XAML dentro de la aplicación, como _Window1.xaml_. Esta es la primera instancia de ventana creada y mostrada por la aplicación, y se convierte en la ventana principal.

Sugerencia

El comportamiento predeterminado de una aplicación es apagarse cuando se cierra la última ventana. Este comportamiento es controlado por la propiedad Application.ShutdownMode. Pero también puede configurar la aplicación para que se apague si MainWindow está cerrada. Establezca Application.ShutdownMode en OnMainWindowClose para habilitar este comportamiento.

Establecer la ventana principal en XAML

Las plantillas que generan la aplicación WPF normalmente establecen la propiedad Application.StartupUri en un archivo XAML. Esta propiedad es útil porque:

  1. Se puede cambiar fácilmente a un archivo XAML diferente en el proyecto.
  2. Crea instancias automáticamente y muestra la ventana especificada.
  3. La ventana especificada se convierte en la 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>

En lugar de usar Application.StartupUri, se puede establecer el Application.MainWindow en una ventana declarada en XAML. Sin embargo, la ventana especificada aquí no se mostrará y deberá establecer su visibilidad.

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

Precaución

Si establece las propiedades Application.StartupUri y Application.MainWindow, mostrará ambas ventanas cuando se inicie la aplicación.

Además, puede usar el evento Application.Startup para abrir una ventana. Para obtener más información, consulte Usar el evento Startup para abrir una ventana.

Establecer la ventana principal en XAML

La primera instancia de ventana creada por la aplicación se convierte automáticamente en la ventana principal y se establece en la propiedad Application.MainWindow. Para establecer una ventana principal diferente, cambie esta propiedad a una ventana:

Application.Current.MainWindow = new Window2();

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

Application.Current.MainWindow.Show()

Si la aplicación nunca ha creado una instancia de una ventana, el código siguiente es funcionalmente equivalente al código anterior:

var appWindow = new Window2();

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

appWindow.Show()

Tan pronto como se crea la instancia de objeto de ventana, se asigna a Application.MainWindow.

Obtener la ventana principal

Puede acceder a la ventana elegida como ventana principal inspeccionando la propiedad Application.MainWindow. El código siguiente muestra un cuadro de mensaje con el título de la ventana principal cuando se hace clic en un botón:

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

Vea también