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();
}
}
これは考えられるすべてのケースで機能するわけではありませんが、私のアプリケーションでは機能します。
これを修正するよりクリーンな方法はありますか?