这个问题的反面已经回答了很多次。
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?
}
}
最佳答案
为了扩展 SLaks 的回答,这里有一个这样的类的例子:
public class WpfWindowWrapper : System.Windows.Forms.IWin32Window
{
public WpfWindowWrapper(System.Windows.Window wpfWindow)
{
Handle = new System.Windows.Interop.WindowInteropHelper(wpfWindow).Handle;
}
public IntPtr Handle { get; private set; }
}
可以从 WPF 窗口的代码隐藏中像这样使用它:
var winForm = new MyWinForm();
winForm.ShowDialog(new WpfWindowWrapper(this));
通过这种方式,Winform 对话框充当 WPF 窗口的正确子级,具有正确的模式行为。
关于wpf - 如何从 WPF 窗口显示 Winforms 对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7152403/