What is the Silverlight's FindElementsInHostCoordinates equivalent in WPF?
Asked Answered
S

2

7

I would like to perform a rectangual hit test on WPF Canvas component in order to get Controls that are overlapped by a Rectangle framework element. I found a Silverlight's VisualTreeHelper.FindElementsInHostCoordinates method, but apparently it's not available in WPF.

What's the best method to achieve such functionality?

Siriasis answered 13/1, 2010 at 19:11 Comment(0)
B
3

The closest equivalent is VisualTreeHelper.HitTest. It works significantly differently to Silverlight's FindElementsInHostCoordinates, but you should be able to use it for your needs.

Begin answered 13/1, 2010 at 20:6 Comment(0)
P
3

Supposing you have a call like this in Silverlight

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

then this WPF code should have an equivalent 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));

in your special case you might want to use GeometryHitTestParameters instead of PointHitTestParameters to do a Rect-Test.

Peachey answered 14/5, 2013 at 10:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.