从 WPF 窗口获取 System.Windows.Forms.IWin32Window
本文关键字:Windows Forms IWin32Window System 获取 WPF 窗口 | 更新日期: 2023-09-27 18:32:01
我正在编写一个 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(感谢斯科特·张伯伦的评论)
使用现有的 NativeWindow 类,该类实现 IWin32Window:
NativeWindow win32Parent = new NativeWindow();
win32Parent.AssignHandle(new WindowInteropHelper(this).Handle);