Вопрос

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

Какой лучший способ добиться такой функциональности?

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top