我的canvas有几个从面板类继承的cutom控件,在运行时使用rendertransform =(。5,.5)动态添加到它。但是当应用平移变换(50,50)并将其旋转100度时,它不会在其位置旋转,它以半径50旋转,为什么? 我做错了什么吗?
答案 0 :(得分:6)
转换不是可交换的,您应该在应用转换之前应用转动。
通常你有一个TransformGroup,然后你就可以改变它的子节点的顺序,如果这不是一个选项,因为某些变换是从父节点“继承”的,你可以使用它们的反演来使先前的变换无效(在某种情况下)应该将目标移回原点的平移,然后您可以将其旋转到原位,然后再次应用原始变换。
文档是您的朋友,以下是TransformGroups
的内容:
在复合变换中,单个变换的顺序很重要。例如,如果首先旋转,然后缩放,然后平移,则会得到与先翻译,然后旋转,然后缩放相比不同的结果。顺序的一个重要原因是旋转和缩放等变换是相对于坐标系的原点完成的。缩放以原点为中心的对象会产生与缩放已从原点移开的对象不同的结果。同样,旋转以原点为中心的对象会产生与旋转远离原点的对象不同的结果。
答案 1 :(得分:0)
如果它以半径50旋转,那是因为你的原点是错误的。
在这种情况下,您只需将RotateTransform
和CenterX
属性设置为CenterY
即可更改50
的来源。