2012-04-26 62 views
1

私は現在、Caliburnフレームワークを使用したWPFアプリケーションを開発中です。アプリケーションウィンドウの右上には、ウィンドウのCLOSE(X)ボタンがあります。私はウィンドウの閉じるボタンのイベントをキャッチしたいと思います。ただし、アプリケーションウィンドウを閉じると、アプリケーションウィンドウを閉じるボタンに関係なく、フェードアウトが開始されます。また、アプリケーションが終了すると、アプリケーションは変更を保存するかどうかをユーザーに確認します。しかし、アプリケーションのEXITボタンをクリックしてSAVE CHANGESメッセージをポップアップしてからフェードアウトを開始することができますが、これはウィンドウのCLOSE(X)ボタンでは発生しません。ウィンドウのCLOSE(X)ボタンを押したとき、フェードアウトが最初に始まります*(致命的に、これは起こらないはずですが、SAVE CHANGESメッセージが最初に表示され、その後フェードアウトされます)*。フェードアウト中にSAVE CHANGES(SAVE CHANGES)メッセージが表示されます。最後に、アプリケーションでメッセージがまだ表示されているため、アプリケーションを閉じることができないため、アプリケーションがクラッシュします。誰もがこれを回避する方法を知っていますか?以下は私がこの問題に使ったコードです。 -WPFのWindows閉じるボタン

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メッセージが表示されます。

誰もこの問題を解決する良いアイデアはありますか?

ご協力いただきありがとうございます。

チャールズ

答えて

2

代わり

protected override void OnClosing(System.ComponentModel.CancelEventArgs e) 
の使用Window.Closingイベント
関連する問題