3

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();
        }
    }

これは考えられるすべてのケースで機能するわけではありませんが、私のアプリケーションでは機能します。

これを修正するよりクリーンな方法はありますか?

4

1 に答える 1

1

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

于 2010-11-22T14:13:47.753 に答える