WPFでログインウインドウを表示する

WPF でメイン画面を表示する前に、自作のダイアログ(ログイン画面など)を表示するときの方法です。

App.xaml

WPF のアプリケーションには Main メソッドが存在しません。そのためアプリで一番最初に呼ばれる AppMain.xaml の Application タグへ Startup で呼ばれるメソッド名を以下の通り記述します。

<Application x:Class="LoginApp"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup"> <!-- ここ -->

App.xaml.cs

App.xaml.cs の Startup はイベントハンドラの指定なので、実際に呼ばれるメソッドを App.xaml.cs へ以下の通り内容を追記します。

public partial class App : Application
{
    // このメソッドを追加
    private void Application_Startup(object sender, StartupEventArgs e)
    {
        // ログイン画面を表示する前に設定する
        this.MainWindow = new MainWindow();
        
        // ログイン画面を表示
        var loginWindow = new LoginWindow();
        bool? dialogResult = loginWindow.ShowDialog();
        
        if(!dialogResult)
        {
            this.Shutdown();
            return;
        }
        
        // メイン画面を表示
        this.MainWindow.Show();
    }
}

メソッドの一番最初の以下の式はおまじないです *1。メイン画面を正しく表示したいときは、ダイアログを設定する前に指定してください。

this.MainWindow = new MainWinodw();

次の行以降は、通常の Behavior でダイアログを表示する際の記述方法と同じです。

*1:本当は違いますが長くなるのでここでは説明しません。