闭幕事件中的ShowDialog

0xD*_*EEF 8 .net c# wpf

如果用户关闭应用程序,则必须显示保存文件消息(以确保他想要丢弃已编辑文件的更改).

为了实现这一点,我有一个带有命令绑定的menuitem(没有按键手势):

private void Command_Exit(object sender, ExecutedRoutedEventArgs e)
{
    Application.Current.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)

主窗口有一个闭幕事件.在这种情况下,我检查是否有未保存的文件.如果是,则必须打开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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

在这个ShowDialog-Method(在我的SaveDialog-Class中实现)我打电话

bool? ret = ShowDialog();
if (!ret.HasValue)
     return null;
if (!ret.Value)
     return null;
Run Code Online (Sandbox Code Playgroud)

问题是:

如果我使用Alt + F4-Shortcut关闭应用程序(主窗口的默认行为),它可以工作,如果有未保存的文件,我会得到保存的.但是如果我通过执行Command_Exit-Method,Method-Call来关闭应用程序

bool? ret = ShowDialog(); 
Run Code Online (Sandbox Code Playgroud)

返回null并且不显示对话框.

如果我将Alt + F4 KeyGesture分配给CommandBinding,则会切换问题:执行Command_Exit效果很好但Alt + F4没有快捷方式.

ShowDialog() - Method在两种情况下都不起作用以及如何解决它的原因是什么?

Ada*_*rth 6

Application.Current.Shutdown路由允许您通过处理Exit事件来侦听关闭请求,如下所述:

http://msdn.microsoft.com/en-us/library/ms597013.aspx

它没有详细说明它如何关闭窗口,因此我不一定会确信关闭事件处理程序会在关闭应用程序之前触发.

关闭应用程序的另一种非常标准的方法是关闭主窗口(最开始显示的窗口).这可能是Window.Close方法,如果你已经在窗口的上下文中,只需调用Close().然后,这将击中结束事件处理程序.