Entwickler-Ecke
WPF / Silverlight - Absolute Position des Mousezeigers
rijndael - Di 23.10.07 10:30
Titel: Absolute Position des Mousezeigers
Hallo zusammen,
kann mir jemand sagen, wie ich die Position des Mauszeigers ermitteln kann.
Hintergrund ist der:
Ich habe ein UserControl, in dem sich Links eine Navigation befindet. Der Rechte Teil des Controls ist in eine obere und eine untere Hälfte mit jeweils einem UserControl geteilt und ich habe ein Mouse-Over Event auf dem unteren UserControl. Ich kann zwar die Position des Zeigers relativ zum UserControl Element ermitteln mit
C#-Quelltext
1: 2: 3: 4:
| void UCMouseMove(object sender, MouseEventArgs e) { e.GetPosition(this); } |
rausfinden, das ist nur leider nicht die Stelle, an der sich die Maus gerade befindet. Meine erste Idee war, das Fenster, in dem mein Control geöffnet wird zu ermitteln. Das würde auch funktionieren, wäre aber sehr aufwendig, da muss es doch eine einfachere Methode geben
txh
rijn
Moderiert von
UGrohne: C#-Tags hinzugefügt.
Christian S. - Di 23.10.07 14:53
Bringt Dich evtl. die TranslatePoint-Methode von UIElement weiter?
Kha - Di 23.10.07 15:04
Ich verstehe die Frage nicht wirklich - selbst mit der Form-Instanz in der Hand kommt man doch nicht an absolute Windows-Koordinaten, oder :gruebel: ? Sow wie ich das sehe, bietet WPF überhaupt keinen Weg, an etwas Anderes als relative Koordinaten zu kommen - bevor man also mit Reflection oder P/Invoke anrückt, müsstest du uns erst einmal erklären, warum du diese imho sinnvolle Einschränkung überwinden willst ;) .
Christian S. - Di 23.10.07 15:11
UIElement kennt auch die Methode PointToScreen, sollte man damit nicht die absoluten Koordinaten bekommen?
Ich dachte, er wollte die Koordinaten relativ zum Fensterrand.
Kha - Di 23.10.07 15:30
Gemein, warum ist die Methode bei MouseDevice protected und bei Visual public :oops: ? Die Frage nach dem Wozu ist aber auch für fenster-globale Koordinaten imho noch offen.
rijndael - Mi 24.10.07 19:44
Dann werde ich das Problem mal weiter ausrollen, vielleicht habe ich ja einen Denkfehler:
Ich zeichen den den Verlauf mehrerer Funktion mit "Line"-Elementen. Beim "mit der Maus über die Line fahren" möchte ich gern ein kleines Fenster öffnen, das mit der rechten unteren Ecke an meinem Mauszeiger kleben bleibt und diverse Informationen gezeichneten Funktion liefert. Das ganze ist in dem schon beschriebenen UserControl "links unten" implementiert also so:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| ------------------- |N |Header | |a |--------------- |v | hier | |i | | | | | ------------------- |
Wenn ich die Methode "e.GetPosition(this)" [this bezieht sich auf UserControl] aufrufe, dann fehlen mir die Anzahl der Pixel "Navi" für die Linke Position und die Pixel des Headers für die obere Position.
Ich habe auch schon angedacht, das ganze mit einem ToolTip zu bauen und dieses per Template so zu formatieren, wie ich es brauche, aber der ToolTip öffnet sich nicht schnell genug und bleibt auch nicht beständig offen und am Mauszeiger kleben.
Es gibt natürlich die Möglichkeit dass Host-Window zu ermittlen und die Breite der Navi bzw. des Header zu ermitteln (was ich mittlerweile auch mache), aber schön ist das nicht.
danke
rijn
Moderiert von
Christian S.: Code-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!