Получить System.Windows.Forms.IWin32Window из окна WPF

Я пишу приложение WPF, и я бы хотел использовать эту библиотеку.

Я могу получить IntPtr для окна, используя

new WindowInteropHelper(this).Handle

но это не будет передано в System.Windows.Forms.IWin32Window, которое мне нужно показать в этом диалоговом окне WinForms.

Как мне отбрасывать IntPtr в System.Windows.Forms.IWin32Window?

Ответ 1

ОПЦИЯ 1

IWin32Window ожидает только свойство Handle, которое не так сложно реализовать, так как у вас уже есть IntPtr. Создайте класс- оболочку, который реализует IWin32Window:

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 (спасибо Скотту Чемберлену комментарий)

Используйте существующий класс NativeWindow, который реализует IWin32Window:

NativeWindow win32Parent = new NativeWindow();
win32Parent.AssignHandle(new WindowInteropHelper(this).Handle);