2014-02-18 59 views
4

因此,我在许多WPF应用程序中遇到了一个问题,在关闭窗口的子窗口后,该窗口(通常是我的主窗口)将进入后台,在我已打开的任何其他窗口后面。经过一番调查后,我发现这个提交给微软的错误报告:Bug Report,他们通常的回应是“WPF团队最近审查过这个问题,并且不会解决它...”如何防止父窗口关闭后进入后台?

有没有人成功解决这个问题他们自己的?它使我疯狂,我找不出解决方案。

编辑:

我给了一些思考一下詹姆斯在他的回答几乎驳回他的建议,由于不方便性质的窗口正对一切之上的后曾建议,我想出了这个:

ChildWindow.Closed += delegate 
{ 
    ChildWindow = null; 
    this.Topmost = true; 
    System.Threading.Thread.Sleep(1000); 
    this.Topmost = false; 
}; 

所以,当引发孩子的Closed()事件,我要确保父窗口是最顶层。然后,让线程休眠1秒,并将最顶层设置为false,以允许其他窗口覆盖此父窗口。

原因暂停:如果我不使用暂停,只是this.Topmost = true其次this.Topmost = false,则效果从未发生和缺陷仍然存在,因为错误的时机。

我不确定这是不是最好的方法,但它的工作原理。微软需要向WPF投入更多资源。

回答

2

设置主窗口:

Topmost=true 

这将有助于一点点,但不会完全解决问题。请记住,如果另一个应用程序具有该设置,则它们最终可能会在应用程序的顶部。让我知道这是否有帮助。

+1

虽然它解决了应用程序进入后台的问题,但它引入了一个问题,即用户无法在应用程序之上引入任何其他窗口。即,如果他们想在应用程序窗口之前将他们的互联网浏览器窗口向前移动。 –

+0

看看我的编辑,我把你的想法和扩展。 –

+0

这正是我将如何处理这种情况。我也同意不应该使用计时器,但实际情况是,对于某些编码,如果没有睡眠计时器,最上面的代码将是理想的。我很高兴能够直接指出你的意思。感谢您的编辑和关于如何让其他窗口位于顶端的信息。 – James

相关问题