Каков эквивалент FindElementsInHostCoordinates Silverlight в WPF? - PullRequest
7 голосов
/ 13 января 2010

Я хотел бы выполнить тест попадания прямоугольника для компонента Canvas WPF, чтобы получить элементы управления, которые перекрываются элементом каркаса Rectangle. Я нашел метод Silverlight VisualTreeHelper.FindElementsInHostCoordinates, но, очевидно, он не доступен в WPF.

Какой самый лучший метод для достижения такой функциональности?

Ответы [ 2 ]

3 голосов
/ 14 мая 2013

Предположим, у вас есть такой звонок в 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 вместо PointHitTestParameters для проведения Rect-Test.

3 голосов
/ 13 января 2010

Ближайший эквивалент VisualTreeHelper.HitTest . Он работает значительно иначе, чем FindElementsInHostCoordinates в Silverlight, но вы должны использовать его для своих нужд.

...