2011-01-14 9 views
0

Ich versuche, Elemente auf einer Leinwand zu drehen und ihre gedrehten (nicht ursprünglichen) Positionen in einer Datei zu speichern. Ich habe ein benutzerdefiniertes UIElement-Steuerelement implementiert, um eine benutzerdefinierte Grafik anzuzeigen. Wenn die Grafik jedoch auf dem Bildschirm gedreht wird, wird sie korrekt gedreht (kein Problem), wenn ich die Position des Elements mithilfe von GetValue (Canvas.LeftProperty) und GetValue (Canvas .TopProperty), die X-, Y-Koordinaten und der Winkel des Elements ist die Position des Originalbildes vor der Drehung.Probleme mit wpf und rotatetransformation

Ich lerne WPF, um ein Projekt für die Schule zu beenden und somit ist mein Wissen über die Technologie nicht so umfangreich, wie ich möchte, aber wenn mir jemand helfen kann, würde ich es sehr schätzen, danke.

ist dabei die Umsetzung des Codes, die ich habe:

CustomObject m; 

List<CustomObject> co = new List<CustomObject>(); 
foreach (var child in canvas1.Children){ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m = child as CustomObject; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m != null && m.IsEnabled && m.IsVisible){ 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveStructure m1 = new SaveStructure(); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>m1.Angle = Convert.ToSingle(ToRadians(m.Angle));</b> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>m1.X = Convert.ToInt32(m.GetValue(Canvas.LeftProperty));</b> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>m1.Y = Convert.ToInt32(m.GetValue(Canvas.TopProperty));</b> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;co.Add(m1); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} 
} 

Hinweis: Alles, was ich wissen will, ist, wie die Position des gedrehten Elements auf der Leinwand zu bekommen, weil ich das Original halten zu erhalten (nicht rotierte) Position.

Antwort

0

Die Position, die Sie erhalten, ist immer noch die gleiche, weil das Objekt nicht verschoben wurde, es wurde nur gedreht, wenn Sie die Grenzen des gedrehten Objekts erhalten möchten, die etwas anderes ist als seine Position. Sie können dies tun, indem Sie die Eckpunktkoordinaten der Elemente (Canvas.GetLeft(m), Canvas.GetTop(m), Canvas.GetLeft(m) + m.Width, Canvas.GetTop(m) + m.Height) abrufen und sie mit der Methode RotateTransformTransform(Point p) rotieren und dann die Grenzen aus diesen gedrehten Punkten extrahieren.

+0

Vielen Dank, ich werde es versuchen und sehen, ob es mein Problem löst – htg2011