我正在写一个WPF应用程序,我想使用这个库.
我可以IntPtr通过使用获得一个窗口
new WindowInteropHelper(this).Handle
Run Code Online (Sandbox Code Playgroud)
但这不会转换System.Windows.Forms.IWin32Window为我需要显示此WinForms对话框.
我该如何投IntPtr来 System.Windows.Forms.IWin32Window?
Tun*_*ung 29
选项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;
}
Run Code Online (Sandbox Code Playgroud)
然后你会得到你的IWin32Window:
IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);
Run Code Online (Sandbox Code Playgroud)
或(根据KeithS的建议):
IWin32Window win32Window = new WindowWrapper(this);
Run Code Online (Sandbox Code Playgroud)
选项2(对Scott Chamberlain的评论)
使用现有的NativeWindow类,它实现了IWin32Window:
NativeWindow win32Parent = new NativeWindow();
win32Parent.AssignHandle(new WindowInteropHelper(this).Handle);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12914 次 |
| 最近记录: |