c# – 从WPF窗口获取System.Windows.Forms.IWin32Window

前端之家收集整理的这篇文章主要介绍了c# – 从WPF窗口获取System.Windows.Forms.IWin32Window前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_0@
我正在编写一个 WPF应用程序,我想使用 this library.

我可以通过使用来获取窗口的IntPtr

new WindowInteropHelper(this).Handle

但这不会转换到System.Windows.Forms.IWin32Window,我需要显示这个WinForms对话框.

如何将IntPtr转换为System.Windows.Forms.IWin32Window?

解决方法

选项1

IWin32Window只需要一个Handle属性,这不是很难实现,因为你已经有了IntPtr.实现IWin32Window的Create a wrapper类:

public class WindowWrapper : System.Windows.Forms.IWin32Window
{
    public WindowWrapper(IntPtr handle)
    {
        _hwnd = handle;
    }

    public WindowWrapper(Window window)
    {
        _hwnd = new WindowInteropHelper(window).Handle;
    }

    public IntPtr Handle
    {
        get { return _hwnd; }
    }

    private IntPtr _hwnd;
}

你会得到你的IWin32Window这样:

IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);

或(作为回应KeithS的建议):

IWin32Window win32Window = new WindowWrapper(this);

选项2(thx to Scott Chamberlain的评论)

使用现有的NativeWindow类,它实现了IWin32Window:

IWin32Window win32Window = new NativeWindow(); 
win32Window.AssignHandle(new WindowInteropHelper(this).Handle);

猜你在找的C#相关文章