2009-10-12 8 views
9

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

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

Спасибо. Eli

+1

Хотите ли вы знать, если ограничивающие прямоугольники перекрываются, или видимые участками? Например, два эллипса могут иметь перекрывающиеся ограничивающие прямоугольники, но фактические эллипсы могут даже не касаться друг друга. –

ответ

4

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

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

17

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

+1

Для приложений WinRT Metro существует также Rect.Intersect, который даст пустой прямоугольник, если нет пересечения, и фактический результат, когда есть. –

+1

Tks Den! Я искал это для WinRT. – andrecarlucci