2009-10-12 16 views
9

J'écris un concepteur qui permet à l'utilisateur de faire glisser les contrôles autour de l'écran. Quelle serait la meilleure façon de détecter si un contrôle chevauche un autre contrôle alors que je suis en train de faire glisser le contrôle?Comment puis-je vérifier si 2 contrôles se chevauchent sur une toile dans WPF?

Devrais-je simplement obtenir les dimensions de FrameworkElement et continuer à vérifier les dimensions des autres éléments?

Merci. Eli

+1

Voulez-vous savoir si les rectangles de délimitation se chevauchent, ou les zones visibles? Par exemple, deux ellipses peuvent avoir des rectangles de délimitation qui se chevauchent, mais les ellipses réelles peuvent même ne pas être en contact. –

Répondre

4

La dimension (FrameworkElement.ActualWidth FrameworkElement.ActualHeight) et postion (Canvas.Top, Canvas.Bottom, Canvas.Left, Canvas.Right) de vos éléments ne suffisent si elles sont toujours rectangulaires. Dans ce cas, vous pouvez facilement calculer si deux rectangles se chevauchent. Si vous les éléments peuvent être de formes plus complexes, il devient poilu. Je n'ai aucune idée si je peux tester l'intersection de deux instances Visual dans WPF.

Peut-être que nous pouvons utiliser hittesting? Avec cette approche, vous pouvez au moins tester si un certain point ou geometry se croisent avec un visuel certian. Vous devrez donc définir une géométrie ou une liste de points correspondant plus ou moins aux limites de votre deuxième visuel.

17

Vous pouvez utiliser la méthode Rect.IntersectsWith

+1

Pour les applications WinRT Metro, il y a aussi Rect.Intersect qui donnera un rectangle vide s'il n'y a pas d'intersection, et un résultat réel quand il y en a. –

+1

Tks Den! Je cherchais ça pour WinRT. – andrecarlucci