C# 从支持WinForms互操作的特定位置获取控件

C# 从支持WinForms互操作的特定位置获取控件,c#,wpf,winforms-interop,C#,Wpf,Winforms Interop,我有一个WPF窗口,其中还包含包装在WindowsFormsHost中的WinForms控件(除了其他WPF控件)。 我想确定在特定位置下显示的控件(WPF或WinForms) 要接收WPF控件的位置,我可以使用 VisualTreeHelper.HitTest(wpfWindow, position) 当WindowsFormsHost显示在此位置时,此操作不起作用。对于这种情况,HitTest()返回WindowsFormsHost后面的WPF控件 您知道如何使其在互操作场景中也起作用吗?

我有一个WPF窗口,其中还包含包装在WindowsFormsHost中的WinForms控件(除了其他WPF控件)。 我想确定在特定位置下显示的控件(WPF或WinForms)

要接收WPF控件的位置,我可以使用

VisualTreeHelper.HitTest(wpfWindow, position)
当WindowsFormsHost显示在此位置时,此操作不起作用。对于这种情况,HitTest()返回WindowsFormsHost后面的WPF控件


您知道如何使其在互操作场景中也起作用吗?

检查位置,看看它们是否在winform范围内。您可以通过在最高级别的WPF控件和winform之间创建转换,然后使用坐标0,0来确定边界。结合宿主窗口的宽度和高度,现在就有了窗口的边界。使用Transform将您的位置转换为最高级别的WPF控件,现在您有了一种检查位置是否在winform边界内的方法

确定鼠标是否在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));
        }
    }

检查位置以查看它们是否在winform边界内。您可以通过在最高级别的WPF控件和winform之间创建转换,然后使用坐标0,0来确定边界。结合宿主窗口的宽度和高度,现在就有了窗口的边界。使用Transform将您的位置转换为最高级别的WPF控件,现在您有了一种检查位置是否在winform边界内的方法

确定鼠标是否在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));
        }
    }

你能在第一部分更具体一点,或者提供一个小样本代码吗?我没有完全理解,谢谢。你能在第一部分更具体一点,还是提供一个小样本代码?我没有完全明白,谢谢