2013-03-21 57 views
1

我有一个WPF窗口,其中还包含WindowsFormsHost(除了其他WPF控件)包装的WinForms控件。 我想确定显示在某个位置下的控件(WPF或WinForms)。从支持WinForms互操作的特定位置获取控制

要接收WPF控件,我可以用

VisualTreeHelper.HitTest(wpfWindow, position) 

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

任何想法如何让这个工作也互操作的场景?

回答

1

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

确定鼠标是否在Winform之后。 Refer to this question

如果它不在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)); 
     } 
    } 
+0

你可以在第一部分更具体或提供一个小的示例代码?我没有完全明白,谢谢 – Harry13 2013-03-22 07:11:52