7

我想对 WPF Canvas 组件执行矩形命中测试,以获得与 Rectangle 框架元素重叠的控件。我找到了 Silverlight 的VisualTreeHelper.FindElementsInHostCoordinates方法,但显然它在 WPF 中不可用。

实现此类功能的最佳方法是什么?

4

2 回答 2

3

假设您在 Silverlight 中有这样的电话

var result = VisualTreeHelper.FindElementsInHostCoordinates(myPoint, myUIElement);

那么这个 WPF 代码应该有一个等价的result

var result = new List<DependencyObject>(); 
                         //changed from external edits, because VisualHit is
                         //only a DependencyObject and may not be a UIElement
                         //this could cause exceptions or may not be compiling at all
                         //simply filter the result for class UIElement and
                         //cast it to IEnumerable<UIElement> if you need
                         //the very exact same result including type

VisualTreeHelper.HitTest(
    myUiElement,
    null,
    new HitTestResultCallback(
        (HitTestResult hit)=>{
            result.Add(hit.VisualHit);
            return HitTestResultBehavior.Continue;
        }),
    new PointHitTestParameters(myPoint));

在您的特殊情况下,您可能希望使用GeometryHitTestParameters而不是进行PointHitTestParametersRect-Test。

于 2013-05-14T10:14:10.223 回答
3

最接近的等价物是VisualTreeHelper.HitTest。它与 Silverlight 的工作方式大不相同FindElementsInHostCoordinates,但您应该能够根据需要使用它。

于 2010-01-13T20:06:53.880 回答