(XAML#09)「メインウィンドウを閉じたときにアプリケーションを終了させる」
Windows フォームを使っているときは、アプリケーションが複数の(モードレス)ウィンドウを使う場合でも、メインウィンドウを閉じたときにアプリケーションは終了しました。WPF アプリケーションでは、複数のウィンドウが表示されている場合、最初に表示したウィンドウを閉じても、他のウィンドウが閉じるまでアプリケーションは終了しません。
たとえば、MainWindow のコンストラクタで、次のように書いておくと、このウィンドウを読み込んだ時に、「Dynamic Window」というタイトルの新しいウィンドウが表示されます。メインウィンドウを閉じても、「Dynamic Window」は残ったままです。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Loaded イベントハンドラーを匿名メソッドで割り当てる
Loaded += delegate(object sender, RoutedEventArgs e)
{
var wnd = new Window();
wnd.Title = "Dynamic Window";
wnd.Show();
};
}
...
これは、Application の ShutdownMode プロパティがデフォルトでは OnLastWindowClose(最後のウィンドウが閉じたときに終了する)に設定されているためです。これを OnMainWindowClose(メインウィンドウが閉じたときに終了する)に変更すれば、Windows フォームの場合と同じように、メインウィンドウを閉じたときにアプリケーションが終了します。
このプロパティは App.xaml で定義するのが簡単です。
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
ShutdownMode="OnMainWindowClose">
<Application.Resources>
</Application.Resources>
</Application>
※メインウィンドウを変更したい場合は、この定義中の StartupUri を変更してください。
ShutdownMode プロパティには、もうひとつ OnExplicitShutdown という設定があります。これを設定すると、ウィンドウを閉じただけではアプリケーションが終了しなくなります。終了条件を設定し忘れると、デバッグの停止やタスクマネージャで強制終了させる必要があるので注意してください。