2010-11-18 1 views
3

Show.MessageBox()で問題を発見しました。Caliburn - ShellFramework - Show.MessageBox

私のアプリケーションでは、子ウィンドウをモーダルに表示するためにいくつかの場所でShow.Dialog()を呼び出します。

新しい子ウィンドウでShow.MessageBox()を使用すると、メッセージボックスはアプリケーションのメインウィンドウの中央に表示されます。ブレークポイントを置くことができ、メッセージボックスの所有者もメインウィンドウです。それを修正する

は、私がIQuestionDialogとハックでした:

[Singleton(typeof(IQuestionDialog))] 
    public class QuestionDialogViewModel : Caliburn.ShellFramework.Questions.QuestionDialogViewModel  
    { 
     public override void AttachView(object view, object context) 
     { 
      Window window = view as Window; 
      if (window != null) 
      { 
       Window owner = GetTopWindow(); 
       if (owner != null) 
       { 
        window.Owner = owner; 
       } 
      } 

      base.AttachView(view, context); 
     } 

     private Window GetTopWindow() 
     { 
      //We have to get the next to last window in the list, the MsgBox will be the last 
      return Application.Current.Windows 
       .Cast<Window>() 
       .Reverse() 
       .Skip(1) 
       .FirstOrDefault(); 
     } 
    } 

これは、すべての可能なケースでは動作しませんが、私のアプリケーションで動作します。

これを解決するためのクリーナー方法はありますか?

+0

RobはCaliburnで修正する方法を検討しています:http://caliburn.codeplex.com/workitem/7701誰かがすぐに清潔なソリューションを持っていますか? – jonathanpeppers

+1

子ウィンドウとダイアログを作成するDefaultWindowManagerに実装が追加されました:http://caliburn.codeplex.com/Thread/View.aspx?ThreadId=235325 –

+0

私はしようとしています新しい改訂版、私はあなたに知らせるでしょう。 – jonathanpeppers

答えて

1

Caliburnの最新リビジョンのDefaultWindowManagerにはこの問題はありません。

関連する問題