2009-10-12 9 views
9

Ich schreibe einen Designer, der es dem Benutzer ermöglicht, Steuerelemente auf dem Bildschirm zu ziehen. Was wäre der beste Weg, um zu erkennen, ob ein Steuerelement ein anderes Steuerelement überlappt, während ich das eine Steuerelement umher schleppe?Wie kann ich prüfen, ob sich zwei Steuerelemente in WPF überlappen?

Sollte ich nur die Abmessungen des FrameworkElement bekommen und die Abmessungen der anderen Elemente überprüfen?

Danke. Eli

+1

Sie, wenn die Hüllrechtecke wissen wollen Sie überlappen oder die sichtbaren Bereiche? Zum Beispiel können zwei Ellipsen überlappende Begrenzungsrechtecke haben, aber die tatsächlichen Ellipsen berühren sich möglicherweise nicht einmal. –

Antwort

4

Die Dimension (FrameworkElement.ActualWidth FrameworkElement.ActualHeight) und Postion (Canvas.Top, Canvas.Bottom, Canvas.Left, Canvas.Right) Ihrer Elemente würde genügen, wenn sie immer rechteckig sind. In diesem Fall können Sie leicht berechnen, ob sich zwei Rechtecke überlappen. Wenn Ihre Elemente komplexere Formen haben können, werden sie haarig. Ich habe keine Ahnung, ob ich den Schnittpunkt zweier visueller Instanzen in WPF testen kann.

Vielleicht können wir hittesting verwenden? Mit diesem Ansatz könnten Sie zumindest testen, ob ein bestimmter point oder geometry Schnitt mit einem bestimmten visuellen. Sie müssten also eine Geometrie oder eine Liste von Punkten definieren, die mehr oder weniger genau mit den Grenzen Ihres zweiten visuellen Objekts übereinstimmen.

17

Sie können das Rect.IntersectsWith Methode

+1

Für WinRT Metro-Anwendungen gibt es auch Rect.Intersect, das ein leeres Rechteck ergibt, wenn keine Schnittmenge vorhanden ist, und ein tatsächliches Ergebnis, wenn es keine gibt. –

+1

Tks Den! Ich habe das für WinRT gesucht. – andrecarlucci