我有一个应用程序的问题,其中模态WPF对话框偶尔会在主应用程序窗口后面。当我点击对话框上的按钮时会出现这种情况,该对话框会在主应用程序窗口中执行一些处理和更新控件(通过绑定)。当它进入后台时 - 单击应用程序中的任何位置会将其重新置于前台。
var dialog = LoadDialogWindowThroughMEF();
dialog.Owner = Application.Current != null ? Application.Current.MainWindow : null;
dialog.ShowInTaskbar = false;
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;
return dialog.ShowDialog();
上面的代码显示了我如何打开模态窗口。这很少发生。
有人知道可能是什么问题吗?
答案 0 :(得分:2)
我不确定我是否有答案,但我可以分享一些想法:
每次遇到此类问题时都会发生错误,因为Owner
未正确设置。所以,我会尝试不设置Owner
并查看是否可以使问题重现。您需要绝对确保Owner
始终设置为正确的父窗口 1 。您可能还想检查它是应用程序的实际MainWindow
应该是父项。我认为大多数时候在代码中明确 2 是有益的。在这种情况下,这意味着最好分配已知的父级(可能您在某处可以使用父级的引用),而不是依靠Application.Current
为您提供该引用。这样做可以让您控制Owner
的作业。它甚至可以摆脱?:
运算符,因为即使在单元测试期间你也可以控制引用。
我还希望您确保实际更新父窗口的代码不会以任何方式强制关注父窗口上的特定控件或类似的内容。 (只要正确的父级设置为Owner
,我就不认为这是一个可能的问题。)
我希望这会对你有所帮助,但我知道如果没有。单击父窗口时再次出现对话框的事实反驳了我的一些(或全部!)点......
1 除了在进行单元测试时,这是完全不同的事情。
2 如同wiktionary.org/wiki/explicit中单词的第一个含义,而不是隐含。