2011-01-19 9 views
3

再び簡単な質問です。WPFウィンドウを非表示にするアプリケーションを終了させないで閉じるイベント

子ウィンドウとしてWPFのウィンドウを使用していますが、ここでは閉じている代わりにウィンドウを非表示にする 'X'ボタンがあります。そのためには、私は持っています:

問題は、親ウィンドウが閉じても、これは決して閉じず、アプリケーションを生き残らせることです。

これに対処する明確な方法はありますか?私はすべてのユーザーコントロール(Windowsの場合)にキルフラグを追加することを考えた:

public bool KillMe; 

private void Window_Loaded(object sender, RoutedEventArgs e){ 
    KillMe = false; 
} 

private void Window_Closing(object sender, CancelEventArgs e) { 
    this.Hide(); 
    if (!KillMe) e.Cancel = true; 
} 

次にMainWindow_Closingに()私はtrueにすべてのウィンドウKillMeフラグを設定する必要があります。

追加のフラグを作成して閉じる前に設定するのを忘れた方が良いでしょうか?

答えて

7

「親の」クローズハンドラでShutdownを呼び出すことができます。これにより、キャンセルが無視されます。

Window.Closingから:シャットダウンが呼び出された場合

、各ウィンドウの閉じるイベントが発生します。ただし、[締め切り]がキャンセルされた場合、取り消しは無視されます。

2

私は通常、このような場合には自分自身のAppGeneral静的クラスを持っています。私が本当にアプリを終了するとき、私はAppGeneral.IsClosing静的ブールを真に設定しています。そして、閉じたときに、:

private void Window_Closing(object sender, CancelEventArgs e) { 
if (!AppGeneral.IsClosing) 
    { 
    this.Hide(); 
    e.Cancel = true; 
    } 
} 

をまた、あなた自身のプロセスを強制終了することができます(それは:)醜いですが、作業)Process.GetCurrentProcess().Kill();

1

あなたは、あなたのマスターの内側

Application.Current.Shutdown();

を使用する必要がありますウィンドウの閉じ方。

これにより、サブウィンドウのキャンセルが優先されます。

+0

ストレートポイント。私はこれを確認できます。 – bonitzenator

関連する問題