如果用户关闭应用程序,则必须显示 Save-File-Message(以确保他想要丢弃已编辑文件的更改)。
为了实现这一点,我有一个带有命令绑定(没有键手势)的菜单项:
private void Command_Exit(object sender, ExecutedRoutedEventArgs e)
{
Application.Current.Shutdown();
}
主窗口有一个关闭事件。在这种情况下,我检查是否有未保存的文件。如果是,则必须打开保存对话框(以选择必须保存哪些文件):
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 方法(在我的 SaveDialog 类中实现)我调用
bool? ret = ShowDialog();
if (!ret.HasValue)
return null;
if (!ret.Value)
return null;
问题是:
如果我使用 Alt+F4-Shortcut 关闭应用程序(主窗口的默认行为)它可以工作,如果有未保存的文件,我会得到 savedialog。但如果我通过执行 Command_Exit-Method 关闭应用程序,则 Method-Call
bool? ret = ShowDialog();
返回 null 并且对话框不出现。
如果我将 Alt+F4 KeyGesture 分配给 CommandBinding,则会切换问题:执行 Command_Exit 效果很好,但 Alt+F4 快捷方式不行。
ShowDialog()-Method 在这两种情况下都不起作用的原因是什么以及如何解决它?