Что такое эквивалент Silverlight FindElementsInHostCoordinates в WPF?
-
20-09-2019 - |
Вопрос
Я хотел бы выполнить прямоугольную проверку попадания в компонент 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-тест.