WPF MouseOver

03/03/2008 - 21:32 von Werner König | Report spam
Hallo NG,

Mousover in WPF scheint bei größerem ScaleTransfom nicht genau zu
funktionieren.
siehe Beispiel:
http://www.gps32.homepage.t-online....erTest.zip

hier soll das MouseOver des Ploygons angezeigt werden.
Es sieht fast so aus, als wenn ein evetuell umschließendes Rechteck
Mouseover bereits auslöst.

Bin noch frisch in WPF. Mach ich was falsch?

Gruß
Werner
 

Lesen sie die antworten

#1 Peter Fleischer
04/03/2008 - 18:52 | Warnen spam
"Werner König" schrieb im Newsbeitrag
news:fqhn84$a6s$03$

Mousover in WPF scheint bei größerem ScaleTransfom nicht genau zu
funktionieren.
siehe Beispiel:
http://www.gps32.homepage.t-online....erTest.zip

hier soll das MouseOver des Ploygons angezeigt werden.
Es sieht fast so aus, als wenn ein evetuell umschließendes Rechteck
Mouseover bereits auslöst.

Bin noch frisch in WPF. Mach ich was falsch?



Hi Werner,
ich kann erst einmal nicht erkennen, dass du etwas falsch machst.

Es sieht so aus, als würde die vom Polygon umrissene Flàche für das
MouseMove mit Rundung berechnet. Warum das so ist, kann ich leider auch
nicht erklàren. Insgesamt ist der Zustand aber nicht befriedigend. Je
kleiner der Ausgangswert, desto größer der relative Fehler. Am besten kann
man das erkennen, wenn man ein Quadrat nimmt:

p(0).X = 1.0#
p(0).Y = 1.0#
p(1).X = 1.0#
p(1).Y = 2.0#
p(2).X = 2.0#
p(2).Y = 2.0#
p(3).X = 2.0#
p(3).Y = 1.0#

Besonders groß sind die Abweichungen bei 2^n Faktoren, z.B.:

sc.ScaleX = 256.0#
sc.ScaleY = 256.0#
MyPolygon.RenderTransform = sc

Die Abweichung erkennt man am besten so:

Private Sub MyPolygon_MouseMove(ByVal sender As Object, _
ByVal e As System.Windows.Input.MouseEventArgs)
Trace.WriteLine(String.Format("{0}", _
Mouse.GetPosition(CType(sender, IInputElement))))
End Sub

Um diese Rundungsprobleme zu eleminieren, sollte man besser den umgekehrten
Weg beschreiten: groß erstellen -> klein transformieren, z.B. so:

p(0).X = 1000.0#
p(0).Y = 1000.0#
p(1).X = 1000.0#
p(1).Y = 2000.0#
p(2).X = 2000.0#
p(2).Y = 2000.0#
p(3).X = 2000.0#
p(3).Y = 1000.0#

For Each pp In p
MyPolygon.Points.Add(pp)
Next

MyPolygon.RenderTransform = New MatrixTransform(0.2#, 0, 0, 0.2#, 0, 0)

Viele Gruesse

Peter

Ähnliche fragen