我有一個C++ windows應用程序調用到調用到託管庫的C++/cli庫中。託管庫調用OpenFileDialog.Show與Win32窗口所擁有的WPF窗口父級。我還沒有找到更好的方法來做到這一點,我在這裏閱讀的所有資源和搜索谷歌和social.msdn建議做我在做什麼。帶有Win32父窗口的WPF OpenFileDialog;窗口關閉時沒有重新獲得焦點
對話框打開很好,但是當我點擊取消按鈕時,應用程序完全失去焦點。我不知道爲什麼會發生,但我似乎無法讓它停止。我已經嘗試了許多不同的東西無濟於事。
如果我只是啓動OpenFileDialog而不創建一個WPF窗口,我沒有看到問題。 如果我沒有設置WPF窗口的所有者,我看不到問題。如果我調用OpenFileDialog.Show並且不通過父項,但仍然創建WPF窗口並設置它的所有者,我仍然會看到問題。
我能夠破解它設置父應用程序窗口前景失去焦點後,但我不想。
我已經上傳了我的方案的一個小例子的解決方案,說明了這個問題:
http://dl.dropbox.com/u/26054523/MixedExample.zip
任何幫助,將不勝感激。
您是否嘗試過在同一個線程上運行對話框? WinForms和Win32都是單線程的。它可能不喜歡你從另一個線程打開對話框。 – 2011-04-12 18:04:29
是的,我有,它不會允許它。在另一個線程中打開的原因是因爲WPF似乎想要在STA線程中運行。 – Jay 2011-04-12 18:27:26
我有一個與C#類似的問題。出於某種原因,一旦OpenFileDialog被解除(通過OK或取消)程序失去焦點。 – Superbest 2012-04-07 02:18:38