Laden...

Event welches nur über dem "Rand" eines grafischen Objekts zieht ...

Letzter Beitrag vor einem Jahr 6 Posts 529 Views
Event welches nur über dem "Rand" eines grafischen Objekts zieht ...

Ich habe zu folgender (sorry - m.E. eigentlich trivialen) Frage gesucht, aber nichts passendes gefunden - hat ggf. jemand eine Idee:

Gibt es ein event, welches zieht, wenn sich der Mauscursor über dem Rand(!) eines grafischen (WPF-)Objekts befindet? 
Ich möchte die Größe z.B. eines Rechtecks durch "ziehen" mit der Maus ändern und dazu z.B. den Cursor nur dann ändern, wenn er sich über der Begrenzung befindet - nicht im Inneren des Objekts.

Oder gehe ich da überhaupt falsch ran?

Danke schon mal!

Schau mal nach dem Stichwort "Adorner", s.a. Übersicht über Adorner. Im Internet gibt es schon einige "Resize Adorner"-Implementationen.

Danke - das sieht schon mal gut aus.

Ich hatte davon leider noch nie "gehört"...

Für alle, die das gleiche Problem haben, würde ich gern auf ein kleines Tutorial verweisen.

In dem wird sehr gut erläutert, wie man eine Resize-Lösung mit dem Adorner hinbekommt.

Ehrlich gesagt: Ohne diese Anleitung hätte ich es niemals hinbekommen - wer kommt schon auf sowas...

Also:

https://www.youtube.com/watch?v=ddVXKMpWGME

Viel erfolg!

Das müsste auch "ganz normal zu Fuß" gehen. Zwischen MouseDown und MouseUp bekommt man auch MouseMove Events, wenn man sich außerhalb des Controls befindet. Wenn man also beim MouseDown "nahe genug" am Rand ist, und ein Resize auch möchte, kann man bis zum MouseUp die Mausbewegungen mitbekommen und die neuen Größen ausrechnen.

Eventuell musst du aber noch die Maus Koordinaten auf Screen Koordinaten umrechnen. Wenn z.B. die Maus 3 Punkte nach rechts bewegt wurde und du deswegen Width um 3 erhöht hast, bekommst du eventuell noch ein MouseMove Event mit einer Position, die 3 Punkte links davon ist. Nach einem Umrechnen auf Screen Koordinaten (Control.PointToScreen) ergibt sich aber die gleiche Koordinate.

Danke auch für den Hinweis.

Aber wenn ich mir den erforderlichen Aufwand ansehe, ist die Lösung mit dem Adorner wohl doch viel einfacher und übersichtlicher.

Den größten Vorteil sehe ich darin, dass man die Adorner-Klasse nur einmal quasi universell erstellen muss und diesen Adorner dann für beliebige Objekte verwenden kann. Ich habe mir bzgl. meines Problems z.B. eine Adorner-Klasse mit drei thumbs erstellt (linker Rand, rechter Rand und in der Mitte zum Verschieben des ganzen Objekts). Die nutze ich nun für verschiedenste Objekte der WPF-Oberfläche.

Trotzdem natürlich nochmal vielen Dank für die Idee!