用于WPF的Control.FromHandle

Car*_*rlo 2 wpf interop

是否有类似的东西:

Control.FromHandle(IntPtr)
Run Code Online (Sandbox Code Playgroud)

对于WPF.这个方法适用于WinForms,所以我只是想知道WPF是否也有它.

谢谢!

Qua*_*ter 6

大多数WPF元素不会创建HWND,因此这通常仅适用于像Window这样的顶级元素.您可以使用HwndSource.FromHwnd获取PresentationSource,然后使用RootVisual属性获取可视树的根:

var rootVisual = HwndSource.FromHwnd(hWnd).RootVisual;
Run Code Online (Sandbox Code Playgroud)

有关WPF如何使用HWND的更多详细信息,另请参阅WPF和Win32互操作概述:

屏幕上的所有WPF元素最终都由HWND支持.创建WPF窗口时,WPF会创建顶级HWND,并使用HwndSource将Window及其WPF内容放入HWND中.应用程序中的其余WPF内容共享该单个HWND.菜单,组合框下拉菜单和其他弹出窗口是一个例外.这些元素创建了自己的顶级窗口,这就是为什么WPF菜单可能会越过包含它的窗口HWND的边缘.当您使用HwndHost在HWF中放置HWND时,WPF会通知Win32如何相对于WPF窗口HWND定位新子HWND.