2014-02-18 148 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

相關問題