Как я могу проверить, перекрываются ли 2 элемента управления друг с другом на холсте в WPF? - PullRequest
11 голосов
/ 12 октября 2009

Я пишу дизайнер, который позволяет пользователю перетаскивать элементы управления по экрану. Как лучше всего определить, если элемент управления перекрывает другой элемент управления, когда я перетаскиваю один элемент управления вокруг него?

Должен ли я просто получить размеры FrameworkElement и продолжить проверять размеры других элементов?

Спасибо. Eli

Ответы [ 2 ]

17 голосов
/ 12 октября 2009

Вы можете использовать метод Rect.IntersectsWith

4 голосов
/ 12 октября 2009

Измерения (FrameworkElement.ActualWidth FrameworkElement.ActualHeight) и положения (Canvas.Top, Canvas.Bottom, Canvas.Left, Canvas.Right) ваших элементов будет достаточно, если они всегда будут прямоугольными. В этом случае вы можете легко вычислить, перекрываются ли два прямоугольника. Если ваши элементы могут быть более сложных форм, они становятся волосатыми. Я понятия не имею, могу ли я проверить на пересечение двух экземпляров Visual в WPF.

Может быть, мы можем использовать hittesting ? При таком подходе вы могли бы по крайней мере проверить, пересекаются ли определенные точки или геометрии с определенным визуалом. Таким образом, вам нужно будет определить геометрию или список точек, которые более или менее близко соответствуют границам вашего второго визуала.

...