mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

メイン画面が起動する前にダイアログを表示する

メイン画面を起動する前に独自のダイアログを表示したくて調べた。
ログイン画面を表示する時なんかが多いかもしれない。

問題点

App.xaml.csでMainWindowを表示する前にダイアログを表示するコードを書いて実行すると,ダイアログを閉じたらアプリケーションが終了してしまい,MainWindowが開きません。
この対策についてメモしておく。

対策1 ShutdownModeを設定する

アプリケーションの実行停止モードを設定してダイアログをとじてもアプリが終了しないようにしてしまう方法。

ShutdownMode 説明
OnLastWindowClose[規定値] アプリケーションの最後のウィンドウを閉じると暗黙的に終了
OnMainWindowClose Application.MainWindowプロパティに割り当てられているウィンドウが閉じた時暗黙的に終了
OnExplicitShutdown 手動でShutdown();するまで終了しない

ShutdownMode公式ドキュメント→Application.ShutdownMode プロパティ (System.Windows) | Microsoft Docs

事前にMainWindowプロパティにメイン画面を登録できない & 元の値に戻さなければならない都合が合って以下のような書き方になっているが,参考までに載せておく。

var dialog = new SampleDialog();
var temp = Current.ShutdownMode;
Current.ShutdownMode = ShutdownMode.OnExplicitShutdown; // memo: 一時的な変更
if (dialog.ShowDialog() != true)
{
	this.Shutdown();
}
Current.ShutdownMode = temp; // memo: 元に戻す


ではまた。
もぐも