1

私は現在、Caliburn フレームワークを使用した WPF アプリケーションに取り組んでいます。アプリケーション ウィンドウの右上には、ウィンドウの CLOSE(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(オブジェクト送信者, 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 に答える