Caliburn - ShellFramework - Show.MessageBox - PullRequest
3 голосов
/ 19 ноября 2010

Я обнаружил проблему с 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();
        }
    }

Это не будет работать для всех возможных случаев, но работает для моего приложения.

Есть какой-нибудь более чистый способ исправить это?

1 Ответ

1 голос
/ 22 ноября 2010

DefaultWindowManager в последней версии Caliburn не имеет этой проблемы.

...