gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:17:03 26 4
gpt4 key购买 nike

我正在编写一个 WPF 应用程序,我想使用 this library .

我可以通过使用为窗口获取一个IntPtr

new WindowInteropHelper(this).Handle

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

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

最佳答案

选项 1

IWin32Window 只需要一个 Handle 属性,这并不难实现,因为您已经有了 IntPtr。 Create a wrapper实现 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);

关于c# - 从 WPF 窗口获取 System.Windows.Forms.IWin32Window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10296018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com