在wpf中进行平移变换后对象未正确旋转?

在wpf中进行平移变换后对象未正确旋转?,wpf,transform,Wpf,Transform,我从panel类继承了几个cutom控件,并在运行时使用rendertransform=(.5,.5)将它们动态添加到画布中。但当应用平移变换(50,50)并将其旋转100度时,它不会在其位置上旋转,而是以50的半径旋转,为什么? 我做错了什么吗?变换不是可交换的,在应用平移之前,应该应用旋转 通常,您有一个TransformGroup,然后您可以只更改其子项的顺序,如果这不是一个选项,因为某些变换是从父项“继承”来的,您可以使用其逆项取消先前的变换(在将目标移回原点的情况下),然后您可以将其原

我从panel类继承了几个cutom控件,并在运行时使用rendertransform=(.5,.5)将它们动态添加到画布中。但当应用平移变换(50,50)并将其旋转100度时,它不会在其位置上旋转,而是以50的半径旋转,为什么?
我做错了什么吗?

变换不是可交换的,在应用平移之前,应该应用旋转

通常,您有一个TransformGroup,然后您可以只更改其子项的顺序,如果这不是一个选项,因为某些变换是从父项“继承”来的,您可以使用其逆项取消先前的变换(在将目标移回原点的情况下),然后您可以将其原地旋转,然后再次应用原始变换


文档是您的朋友,以下是您可以找到的内容:

在复合变换中,各个变换的顺序很重要。例如,如果先旋转,然后缩放,然后平移,则得到的结果与先平移,然后旋转,然后缩放的结果不同。顺序重要的一个原因是,旋转和缩放等变换是相对于坐标系的原点完成的。缩放以原点为中心的对象与缩放远离原点的对象会产生不同的结果。类似地,旋转以原点为中心的对象会产生与旋转已远离原点的对象不同的结果


变换不是可交换的,应在应用平移之前应用旋转

通常,您有一个TransformGroup,然后您可以只更改其子项的顺序,如果这不是一个选项,因为某些变换是从父项“继承”来的,您可以使用其逆项取消先前的变换(在将目标移回原点的情况下),然后您可以将其原地旋转,然后再次应用原始变换


文档是您的朋友,以下是您可以找到的内容:

在复合变换中,各个变换的顺序很重要。例如,如果先旋转,然后缩放,然后平移,则得到的结果与先平移,然后旋转,然后缩放的结果不同。顺序重要的一个原因是,旋转和缩放等变换是相对于坐标系的原点完成的。缩放以原点为中心的对象与缩放远离原点的对象会产生不同的结果。类似地,旋转以原点为中心的对象会产生与旋转已远离原点的对象不同的结果


如果它以50为半径旋转,那是因为原点错误


在这种情况下,您只需通过将
CenterX
CenterY
属性都设置为
50
来更改
RotateTransform
的原点。如果旋转半径为50,那是因为原点错误


在这种情况下,您只需通过将
CenterX
CenterY
属性都设置为
50
来更改
RotateTransform
的原点。我在TransformGroup中有两个转换应用了RenderTransform。您可以给出此解决方案的代码示例,但是,我也有同样的问题,因为我直接从数据库生成c代码中的“待旋转”对象,所以任何xaml示例都是不相关的。我不想再提一个重复的问题。@ThrowingDrawer:“任何xaml示例都是不相关的”,这简直是胡说八道。1.在绝大多数情况下(如本例中),存在从XAML到C#的简单而直接的翻译。2.WPF是围绕动态和不断变化的内容设计的,因此它的所有数据绑定和模板功能、来自DB或API的数据都不是抛弃XAML和编写意大利面代码的借口。这背后的原因是按钮的位置和角度存储在数据库中。这些按钮是在运行时生成的。他们需要能够旋转和移动。但是,当我点击某个位置(例如左上角)上的旋转按钮(例如逆时针90度)时,它们都会这样做。实际上,您正在单击右上角。我的问题是,这些按钮会将光标捕捉到如果不旋转光标就会被单击的位置。这似乎有点模糊,但很难解释,因为它们(未知数量)是从运行时生成的,所以它们没有任何硬编码的xaml。一切都是在c#中设置的。我在TransformGroup中有两个转换应用了RenderTransform。如果您可以为这个解决方案提供一个代码示例,我也有同样的问题,但是因为我直接从数据库生成c#代码中的“待旋转”对象,任何xaml示例都是无关的。我不想再提一个重复的问题。@ThrowingDrawer:“任何xaml示例都是不相关的”,这简直是胡说八道。1.在绝大多数情况下(如本例中),存在从XAML到C#的简单而直接的翻译。2.WPF是围绕动态和不断变化的内容设计的,因此它的所有数据绑定和模板功能、来自DB或API的数据都不是抛弃XAML和编写意大利面代码的借口。这背后的原因是按钮的位置和角度存储在数据库中。这些按钮是在运行时生成的。他们需要能够旋转和移动。但是,当我点击某个位置(例如左上角)上的旋转按钮(例如逆时针90度)时,它们都会这样做。实际上,您正在单击右上角。我的问题是,这些按钮会将光标捕捉到如果不旋转光标就会被单击的位置。这可能看起来有点模糊,但它是ha