ユーザーがアプリケーションを閉じる場合は、保存ファイルメッセージを表示する必要があります(編集したファイルの変更を確実に破棄するため)。
これを実装するために、コマンドバインディング(キージェスチャなし)を備えたmenuitemがあります:
private void Command_Exit(object sender, ExecutedRoutedEventArgs e)
{
Application.Current.Shutdown();
}
メインウィンドウには終了イベントがあります。この場合、未保存のファイルがあるかどうかを確認します。はいの場合、savedialogを開く必要があります(選択するには、どのファイルを保存する必要がありますか)。
private void Window_Closing(object sender, CancelEventArgs e)
{
if (sdl.Count() > 0)
{
SaveDialog sd = new SaveDialog();
IEnumerable<Doc> close = sd.ShowDialog(this);
if (close == null)
e.Cancel = true;
else
foreach (Doc document in close)
document.Save();
}
}
このShowDialog-Method(私のSaveDialog-Classに実装されています)で私は呼び出します
bool? ret = ShowDialog();
if (!ret.HasValue)
return null;
if (!ret.Value)
return null;
問題は:
Alt + F4-ショートカットを使用してアプリケーションを閉じると(デフォルト-メインウィンドウの動作)、それは機能し、保存されていないファイルがある場合は保存されたダイアログを取得します。しかし、Command_Exit-Methodを実行してアプリケーションを閉じると、Method-Call
bool? ret = ShowDialog();
nullを返し、ダイアログは表示されません。
Alt + F4 KeyGestureをCommandBindingに割り当てると、問題が切り替わります。Command_Exitの実行は正常に機能しますが、Alt+F4ショートカットは機能しません。
ShowDialog()-メソッドが両方の場合に機能しない理由とそれを修正する方法は何ですか?