メイン アプリケーション ウィンドウを取得または設定する方法 (WPF .NET)

この記事では、Windows Presentation Foundation (WPF) のメイン アプリケーション ウィンドウを取得または設定する方法について説明します。 WPF アプリケーション内で最初にインスタンスが作成される Window が、Application によってメイン アプリケーション ウィンドウとして自動的に設定されます。 メイン ウィンドウは、Application.MainWindow プロパティを使用して参照します。

多くの場合、プロジェクト テンプレートを使って、Application.StartupUri を _Window1.xaml_ のようなアプリケーション内の XAML ファイルに設定します。 これが、アプリケーションによって最初にインスタンスが作成され、表示されるウィンドウで、メイン ウィンドウになります。

ヒント

アプリケーションの既定の動作では、最後のウィンドウが閉じられると、シャットダウンします。 この動作は、Application.ShutdownMode プロパティで制御します。 代わりに、MainWindow が閉じたらシャットダウンするようにアプリケーションを構成することもできます。 この動作を有効にするには、Application.ShutdownModeOnMainWindowClose に設定します。

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 を使用する代わりに、XAML で宣言したウィンドウに 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">

    <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

関連項目