2011-08-22 41 views
2

這個問題的反面已被回答了很多次。如何從WPF窗口顯示Winforms對話框?

public static void SetOwner(object activeWindow, object dialog) 
{ 
    if (IsWindow(dialog) && IsWindow(activeWindow)) 
    { 
     (dialog as Window).Owner = (activeWindow as Window); 
    } 
    else if (IsForm(dialog) && IsForm(activeWindow)) 
    { 
     (dialog as Form).Owner = (activeWindow as Form); 
    } 
    else if (IsWindow(dialog) && IsForm(activeWindow)) 
    { 
     var wih = new WindowInteropHelper(dialog as Window); 
     wih.Owner = (activeWindow as Form).Handle; 
    } 
    else if (IsForm(dialog) && IsWindow(activeWindow)) 
    { 
     var dialogForm = dialog as Form; 
     var ownerWindow = activeWindow as Window; 
     // What goes here? 
    }   
} 
+0

此問題:http://stackoverflow.com/questions/1095763/how-to-set-a-wpf-window-as-the-owner-of-a-winforms-form –

+0

你不必指定一個所有者,Form.ShowDialog()會找到一個。 –

回答

2

你需要創建一個實現的WinForms IWin32Window接口,並返回(使用new WindowInteropHelper(window).Handle)的WPF窗口的句柄類,然後傳遞到窗體的ShowDialog

+0

我不得不重構一下我的IDialogService API,但現在新的解決方案很好用。謝謝! –