Partilhar via


Como obter ou definir a janela principal do aplicativo (WPF .NET)

Este artigo ensina como obter ou definir a janela principal do aplicativo para o Windows Presentation Foundation (WPF). O primeiro Window que é instanciado dentro de um aplicativo WPF é definido automaticamente por Application como a janela principal do aplicativo. A janela principal é referenciada com a propriedade Application.MainWindow.

Na maioria das vezes, um modelo de projeto definirá o Application.StartupUri para um arquivo XAML em seu aplicativo, como _Window1.xaml_. Esta é a primeira janela instanciada e mostrada pelo seu aplicativo, e torna-se a janela principal.

Dica

O comportamento padrão para um aplicativo é desligar quando a última janela é fechada. Esse comportamento é controlado pela propriedade Application.ShutdownMode. Em vez disso, você pode configurar o aplicativo para desligar se o MainWindow estiver fechado. Defina Application.ShutdownMode como OnMainWindowClose para habilitar esse comportamento.

Definir a janela principal em XAML

Os modelos que geram seu aplicativo WPF normalmente definem a propriedade Application.StartupUri como um arquivo XAML. Esta propriedade é útil porque:

  1. É facilmente alterável para um arquivo XAML diferente em seu projeto.
  2. Automaticamente instancia e exibe a janela especificada.
  3. A janela especificada torna-se a 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>

Em vez de usar Application.StartupUri, você pode definir o Application.MainWindow como uma janela declarada por XAML. No entanto, a janela especificada aqui não será exibida e você deve definir sua visibilidade.

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

Atenção

Se você definir as propriedades Application.StartupUri e Application.MainWindow, exibirá ambas as janelas quando o aplicativo for iniciado.

Além disso, você pode usar o evento Application.Startup para abrir uma janela. Para obter mais informações, consulte Utilizar o evento Startup para abrir uma janela.

Definir a janela principal no código

A primeira janela instanciada pelo seu aplicativo torna-se automaticamente a janela principal e é definida para a propriedade Application.MainWindow. Para definir uma janela principal diferente, altere esta propriedade para uma janela:

Application.Current.MainWindow = new Window2();

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

Application.Current.MainWindow.Show()

Se seu aplicativo nunca criou uma instância de uma janela, o código a seguir é funcionalmente equivalente ao código anterior:

var appWindow = new Window2();

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

appWindow.Show()

Assim que a instância do objeto window é criada, ela é atribuída a Application.MainWindow.

Abrir a janela principal

Você pode acessar a janela escolhida como a janela principal inspecionando a propriedade Application.MainWindow. O código a seguir exibe uma caixa de mensagem com o título da janela principal quando um botão é clicado:

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

Ver também