1

我目前正在使用 Caliburn 框架开发 WPF 应用程序。在应用程序窗口的右上角,有一个窗口关闭(X)按钮。我想捕捉 Windows CLOSE 按钮的事件。但是,当应用程序窗口关闭时,无论有什么按钮关闭应用程序窗口,都会开始淡出。此外,当应用程序关闭时,如果有任何更改,应用程序将询问用户是否要保存更改。但是,我只能设法让我的应用程序中的 EXIT 按钮弹出 SAVE CHANGES 消息,然后开始淡出,但 Windows CLOSE(X) 按钮不会发生这种情况。当我按下 windows 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:

私人无效FormFadeOutAnimation_Completed(对象发送者,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 消息。

有谁知道如何解决这个问题?

感谢您提前提供任何帮助。

查尔斯

4

1 回答 1

2

使用 Window.Closing 事件而不是

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
于 2012-04-27T02:12:22.167 回答