wpf - 如何从 WPF 窗口显示 Winforms 对话框?

标签 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?
    }           
}

最佳答案

为了扩展 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/

相关文章:

c# - WPF WebBrowser控件如何禁用IE的快捷键?

.net - 如何向 WPF 文本框添加提示文本?

c# - 有什么方法可以查看 C# 应用程序的泄漏内存?

.net - 从 WebBrowser 控件中打开文件?

c# - 获取 Groupbox 的真正可用区域

c# - 在 TextBlock 中环绕文本

c# - WPF:DependencyProperty 适用于 TextBlock 但不适用于自定义控件

c# - 垂直滑动模拟鼠标事件发送到 Windows 10 平板电脑上的 Windows 窗体应用程序中的错误控件

c# - 允许 'pasting data' 进入 WPF 文本框

c# - 如何检查文件是否存在c#