我发现了Show.MessageBox()的一个问题。
在我的应用程序中,我在几个地方调用Show.Dialog()以模态方式显示子窗口。
然后,如果你在新的子窗口中使用Show.MessageBox(),消息框会出现在应用程序的主窗口上方居中。你可以放一个断点,然后消息框的所有者也是主窗口。
为了解决这个问题,我使用了IQuestionDialog的一个hack:
[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();
}
}
这种方法并不适用于所有情况,但对于我的应用程序有效。
有没有更简洁的方法来解决这个问题?