我目前正在使用Caliburn框架开发WPF应用程序。在应用程序窗口的右上角,有一个窗口关闭(X)按钮。我想抓住Windows CLOSE按钮的事件。但是,当应用程序窗口关闭时,无论何种按钮关闭应用程序窗口,淡出都将开始。此外,当应用程序关闭时,应用程序将询问用户是否要保存更改,如果有任何更改。但是,我只能设法在我的应用程序中获取EXIT按钮以弹出SAVE CHANGES消息然后开始淡出,但是对于Windows CLOSE(X)按钮不会发生这种情况。当我按下窗口CLOSE(X)按钮时,淡出将首先开始*(理论上,这不应该发生,它应该先显示SAVE CHANGES消息,然后再显示淡出)*。在淡出过程中,会出现SAVE CHANGES消息。最后,应用程序崩溃,因为应用程序无法关闭,因为消息仍显示在应用程序中。有没有人知道如何解决这个问题?以下是我用于解决问题的代码。
wpf视图的代码隐藏 - 我用它来捕获WINDOWS CLOSE按钮的事件:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
if (!closed)
{
e.Cancel = true;
FormFadeOut.Begin();
closed = true;
}
base.OnClosing(e);
}
This code is used to close the application when the fadeout ends:
private void FormFadeOutAnimation_Completed(object sender,EventArgs e) {
this.Close();
}
在我的xaml中,我使用此代码调用函数在关闭时弹出SAVE CHANGES消息:
cal:Message.Attach="[Event Closing] = [Action CloseApp2()]"
在我的视图模型中,上面的xaml代码调用了以下函数:
public void CloseApp2()
{
// isClosing = true;
events.Publish(new IsClosingEvent());
// events.Publish(new ClearItemsEvent());
// events.Publish(new SwitchTimerOffEvent());
// Thread.Sleep(2000);
}
当发送“IsClosingEvent”事件时,如果用户做出任何更改,将显示SAVE CHANGES消息。
有没有人对如何解决这个问题有任何好的想法?
提前感谢您的任何帮助。
查尔斯
答案 0 :(得分:2)
使用Window.Closing事件而不是
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)