2009-10-12 9 views
9

Escribo un diseñador que permite al usuario arrastrar controles por la pantalla. ¿Cuál sería la mejor forma de detectar si un control se superpone a otro control mientras estoy arrastrando el control?¿Cómo puedo verificar si dos controles se superponen en un lienzo en WPF?

¿Debo obtener las dimensiones del FrameworkElement y seguir comprobando las dimensiones de los otros elementos?

Gracias. Eli

+1

¿Quieres saber si los rectángulos delimitadores se superponen, o las áreas visibles? Por ejemplo, dos elipses pueden tener rectángulos de delimitación superpuestos, pero las elipses reales podrían no tocarse. –

Respuesta

4

La dimensión (FrameworkElement.ActualWidth FrameworkElement.ActualHeight) y la posición (Canvas.Top, Canvas.Bottom, Canvas.Left, Canvas.Right) de sus elementos serían suficientes si son siempre rectangulares. En ese caso, puede calcular fácilmente si dos rectángulos se superponen. Si los elementos pueden ser de formas más complejas se pone peluda. No tengo idea si puedo probar la intersección de dos instancias Visual en WPF.

Tal vez podamos usar hittesting? Con este enfoque, al menos podría probar si un determinado point o geometry se cruzan con un visual certian. Por lo tanto, debería definir una geometría o una lista de puntos que coincidan más o menos estrechamente con los límites de su 2da visual.

17

Usted puede utilizar el método Rect.IntersectsWith

+1

Para las aplicaciones WinRT Metro, también existe Rect.Intersect que dará un rectángulo vacío si no hay intersección, y un resultado real cuando lo hay. –

+1

Tks Den! Estaba buscando esto para WinRT. – andrecarlucci

Cuestiones relacionadas