2011-10-19 28 views

回答

6

考慮將參數傳遞給ShowDialog方法,而不是使用Parent屬性。

您可以編寫輔助類

class Wpf32Window : IWin32Window 
{ 
    public IntPtr Handle { get; private set; } 

    public Wpf32Window(Window wpfWindow) 
    { 
    Handle = new WindowInteropHelper(wpfWindow).Handle; 
    } 
} 

public static class WindowExtensions 
{ 
    public static IWin32Window GetWin32Window (this Window parent) 
    { 
    return new Wpf32Window(parent); 
    } 
} 

之後,你可以只寫

winFormsWindow.Show(yourWpfWindow.GetWin32Window()); 
+0

創建的對象的'Handle'屬性爲null。你知道爲什麼嗎? –

+0

你的wpf窗口已經創建好了嗎?當窗口已經加載時,請嘗試使用此代碼。在我的情況下,我沒有這個問題。可能這篇文章將有所幫助http://social.msdn.microsoft.com/Forums/ar/wpf/thread/5f89ac58-d2ef-4ac0-aefb-b2826dbef48a – nevermind

+0

這似乎不能正常工作 - 「新的Wpf32Window」從來沒有獲得釋放,甚至在程序結束後,原始進程仍然是因爲新窗口從未正確釋放。 – Conrad

2

在您的WPF窗口中放置一個WindowsFormsHost,其中包含一個用作對話框父窗口的窗體用戶控件。