遇到wpf和rotatetranformation问题

时间:2011-01-14 19:06:21

标签: wpf canvas

我正在尝试在画布上旋转元素并将其旋转(非原始)位置保存到文件中。我实现了一个自定义UIElement控件来显示自定义图形,但是当在屏幕上旋转图形时它会正确旋转(没有问题)但是当我使用GetValue(Canvas.LeftProperty)和GetValue(Canvas)获取元素的位置时.TopProperty),X,Y坐标和元素的角度是旋转前原始图像的位置。

我正在学习WPF来完成学校的项目,因此我对技术的了解并不像我想的那么大,但如果有人能帮助我,我会非常感激,谢谢。

这是我拥有的代码的实现:

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;}  
}   

注意:我想知道的是如何在画布上获取旋转元素的位置,因为我不断获得原始(未旋转)位置。

1 个答案:

答案 0 :(得分:0)

你得到的位置仍然是相同的,因为对象没有移动,它只是旋转,如果你想获得旋转对象的边界不同于获得它的位置。您可以通过获取元素的角点坐标(Canvas.GetLeft(m), Canvas.GetTop(m), Canvas.GetLeft(m) + m.Width, Canvas.GetTop(m) + m.Height)并使用RotateTransform的{​​{1}}方法旋转它们,然后从这些旋转点中提取边界来实现。