我正在尝试在画布上旋转元素并将其旋转(非原始)位置保存到文件中。我实现了一个自定义UIElement控件来显示自定义图形,但是当在屏幕上旋转图形时它会正确旋转(没有问题)但是当我使用GetValue(Canvas.LeftProperty)和GetValue(Canvas)获取元素的位置时.TopProperty),X,Y坐标和元素的角度是旋转前原始图像的位置。
我正在学习WPF来完成学校的项目,因此我对技术的了解并不像我想的那么大,但如果有人能帮助我,我会非常感激,谢谢。
这是我拥有的代码的实现:
CustomObject m;
List<CustomObject> co = new List<CustomObject>();
foreach (var child in canvas1.Children){
m = child as CustomObject;
if (m != null && m.IsEnabled && m.IsVisible){
SaveStructure m1 = new SaveStructure();
<b>m1.Angle = Convert.ToSingle(ToRadians(m.Angle));</b>
<b>m1.X = Convert.ToInt32(m.GetValue(Canvas.LeftProperty));</b>
<b>m1.Y = Convert.ToInt32(m.GetValue(Canvas.TopProperty));</b>
co.Add(m1);
}
}
注意:我想知道的是如何在画布上获取旋转元素的位置,因为我不断获得原始(未旋转)位置。
答案 0 :(得分:0)
你得到的位置仍然是相同的,因为对象没有移动,它只是旋转,如果你想获得旋转对象的边界不同于获得它的位置。您可以通过获取元素的角点坐标(Canvas.GetLeft(m), Canvas.GetTop(m), Canvas.GetLeft(m) + m.Width, Canvas.GetTop(m) + m.Height
)并使用RotateTransform
的{{1}}方法旋转它们,然后从这些旋转点中提取边界来实现。