我正在编写一个 WPF 应用程序,我想利用这个库。
我可以IntPtr
通过使用获得一个窗口
new WindowInteropHelper(this).Handle
但这不会转换为System.Windows.Forms.IWin32Window
,我需要显示这个 WinForms 对话框。
我该如何IntPtr
投到 System.Windows.Forms.IWin32Window
?
选项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(感谢 Scott Chamberlain 的评论)
使用现有的实现 IWin32Window 的 NativeWindow 类:
NativeWindow win32Parent = new NativeWindow();
win32Parent.AssignHandle(new WindowInteropHelper(this).Handle);