我有一个Window,我通过调用ui线程上的ShowDialog()调用来显示(我在另一个线程上):
myMainWindowDispatcher.BeginInvoke(new Func<bool?>(myDialog.ShowDialog));
myDialog的所有者已设置为myMainWindow。当对话框显示它始终位于顶部时,我可以与后面的窗口进行交互! (挫败了制作模态所需的目的)。我曾经做同样的事情,即从另一个线程调度调用,它曾经工作,即模态。现在,对于我的生活,我无法弄清楚它为什么不是。我不能在这里粘贴我的整个项目代码 - 你能想到任何会使Window非模态的东西吗?
答案 0 :(得分:0)
有趣的是:我挖出了备份并找到了原因:
在此对话框之前打开另一个对话框,使用ShowDialog,Dialog A显示的对话框,然后在对话框B上显示对话框B.加载对话框B后,我现在隐藏对话框A,Window.Hide(),然后在对话框B关闭时再次显示它。 隐藏Dialog A会使Dialog B后面的其他窗口再次与用户交互,而Dialog B则会打开!
我猜测的原因是因为一次显示多个对话框并不普通,当我隐藏其中一个时,WPF认为它可以再次启用其他Windows ..但这只是我的猜测!
解决方案是代替隐藏make非常小的另一个Dialog(注意:将Visibility设置为Hidden与调用Hide()具有相同的结果):
public void HideDialog()
{
myDialogA.SizeToContent = SizeToContent.Manual;
myDialogA.Height = 0;
myDialogA.Width = 0;
}
public void UnHideDialog()
{
myDialogA.SizeToContent = SizeToContent.WidthAndHeight;
}
(显示多个对话框的业务要求超出了这个问题的范围,在我被称为使用模态窗口的邪恶kanevil之前,并且不相关,如果您想知道如何显示多个对话框,请参阅此处:{{3 }})