所以,我已经遇到了很多WPF应用程序的问题,在关闭窗口的儿童窗口之后,那个窗口(通常是我的主窗口)将进入后台,在我打开的任何其他东西后面。经过一些研究,我发现这个提交给微软的错误报告:Bug Report和他们通常的回应“WPF团队最近审查了这个问题,并且不会解决它......”
有没有人成功地自己解决这个问题?它让我发疯,我无法找到解决方案。
修改
我考虑了詹姆斯在他的回答中所推荐的内容,并且由于窗户的不便之处几乎解除了他的建议,我想出了这个:
ChildWindow.Closed += delegate
{
ChildWindow = null;
this.Topmost = true;
System.Threading.Thread.Sleep(1000);
this.Topmost = false;
};
因此,当引发孩子的Closed()
事件时,我确保父窗口是最顶层的。然后,我让线程休眠1秒钟,并将topmost设置为false,以允许其他窗口覆盖此父窗口。
暂停的原因:如果我不使用暂停,只有this.Topmost = true
后跟this.Topmost = false
,那么效果永远不会发生,并且错误仍然会发生,因为该错误的时间。
我不确定这是否是最好的方式,但它确实有效。微软需要为WPF投入更多资源。
答案 0 :(得分:2)
将主窗口设置为:
Topmost=true
这应该有所帮助,但不会完全解决问题。请记住,如果另一个应用程序具有该设置,则无论如何它们最终都会在应用程序之上。如果这有帮助,请告诉我。
答案 1 :(得分:1)
我只想在问题下发表评论,但我没有足够的声誉。 我遇到了同样的问题,在使用了此处介绍的解决方案后,我意识到一个更干净的解决方案是在父级上调用Focus()而不是使其位于最顶层,设置一个计时器,然后移除最顶层:>
ChildWindow.Closed += delegate
{
ChildWindow = null;
parentWindow?.Focus();
};
答案 2 :(得分:0)
此错误确实很烦人,因为它并非一直存在,有时很难复制。我知道OP询问过WPF,但是到目前为止,这是我针对WinForms的解决方法(我宁愿避免使用Thread.Sleep(1000)
,以便UI保持响应状态)
ChildWindow.Closed += delegate { this.Activate(); };