从支持WinForms互操作的特定位置获得控制
本文关键字:位置 控制 定位 支持 WinForms 互操作 | 更新日期: 2023-09-27 18:05:03
我有一个WPF窗口,其中也包含WinForms控件包装在WindowsFormsHost(除了其他WPF控件)。我想确定在某个位置显示的控件(WPF或WinForms)。
接收WPF控件的位置,我可以使用
VisualTreeHelper.HitTest(wpfWindow, position)
当WindowsFormsHost显示在此位置时,此操作不起作用。在这种情况下,HitTest()返回一个WPF控件,该控件位于WindowsFormsHost的后面。
有什么想法如何让工作也为互操作场景?
检查位置是否在窗体边界内。您可以通过在最高级WPF控件和窗体之间创建转换,然后使用坐标0,0来确定边界。结合宿主窗口的宽度和高度,现在就有了窗口的边界。使用转换将您的位置转换为最高级的WPF控件,现在您就有了一种检查位置是否在winform范围内的方法。
在确定鼠标是否在窗体内之后。参考这个问题
如果不在winform中,请使用VisualTreeHelper。
public Rect HostRect
{
get
{
var transform = _Host.TransformToVisual(this);
return new Rect(transform.Transform(new Point(0, 0)), new Point(_Host.ActualWidth, _Host.ActualHeight));
}
}