2011-05-21 70 views
1

我有几个从面板类继承的cutom控件的画布,在运行时用rendertransform =(.5,.5)动态添加到它。但是当应用平移变换(50,50)并旋转100度时,它不会在它的位置上旋转,它会以50的半径旋转,为什么? 我做错了什么吗?对象在wpf中转换转换后不能正确旋转?

回答

6

转换不可交换,您应该在应用转换之前应用转动。

通常你有一个TransformGroup,那么你可以改变它的孩子的顺序,如果这不是一个选项,因为某些变换是从父母“继承”的,你可以使用它们的逆变换先前变换(在这种情况下的应该将目标移回原点的翻译),然后您可以将其旋转到原位,然后再次应用原始变换。


的文档是你的朋友,这里是我能为TransformGroups发现:

在复合转型,各个转换的顺序很重要。例如,如果首先旋转,然后缩放然后翻译,则会得到与先翻译,然后旋转然后缩放不同的结果。顺序显着的一个原因是像旋转和缩放这样的变换是相对于坐标系的原点完成的。缩放以原点为中心的对象会产生与缩放从原点移开的对象不同的结果。类似地,旋转以原点为中心的对象会产生与旋转离开原点的对象不同的结果。

+0

我将TransformGroup中的两个变换应用到RenderTransform – Code0987 2011-05-21 18:57:52

+0

然后更改顺序,也可以看到我编辑的答案。 – 2011-05-21 18:58:29

+0

感谢它的工作,当我把rotatetransform移到顶端。 – Code0987 2011-05-21 19:05:42

0

如果它以50的半径旋转,这是因为你的原点是错误的。

在这种情况下,只需将CenterXCenterY属性都设置为50即可更改您的RotateTransform的原点。

+0

是没有效果,因为我申请rendertransform =(.5,.5) – Code0987 2011-05-21 19:15:51

+0

你是否设置了CenterX和CenterY属性? – Gabe 2011-05-21 19:22:47

+0

什么都没有。它适用于rendertransformorigin =(.5,.5)时 – Code0987 2011-05-21 19:30:33