1

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

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

VisualTreeHelper.HitTest(wpfWindow, position)

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

任何想法如何让它也适用于互操作场景?

4

1 回答 1

1

检查位置以查看它们是否在 winform 范围内。您可以通过在最高级别的 WPF 控件和 winform 之间创建一个转换来确定边界,然后使用坐标 0,0。结合托管窗口的宽度和高度,您现在有了窗口的边界。使用转换到最高级别的 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));
        }
    }
于 2013-03-21T15:20:34.687 回答