通过 UIElement.TranslatePoint 计算的子元素中心偏离正确值

Calculation of childelement center via UIElement.TranslatePoint deviates from correct value

我有一个矩形,周围有一些元素,用户可以通过鼠标旋转这些元素。这样的旋转适用于 RotateTransform,但旋转中心始终存在轻微偏移。 我这样计算中心:

this.rotationCenter = this.cornerA.CalculatePointOnLine(this.cornerC, 0.5);

CornerA和CornerC是矩形的角,构建对角线。 现在我想设置所有 RotateTransforms 相对于相应元素的中心。

Logger.Logger.Write("coord.log", "center : " + this.rotationCenter.X + " ; " + this.rotationCenter.Y);
this.rotateSurroundingRectangle.CenterX = this.ParentLayer.TranslatePoint(this.rotationCenter, this.suroundingRectangle).X;
this.rotateSurroundingRectangle.CenterY = this.ParentLayer.TranslatePoint(this.rotationCenter, this.suroundingRectangle).Y;

Logger.Logger.Write("coord.log", "relative center : " + this.rotateSurroundingRectangle.CenterX + " ; " + this.rotateSurroundingRectangle.CenterY);

this.rotateResizeCorner1.CenterX = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner1).X;
this.rotateResizeCorner1.CenterY = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner1).Y;
this.rotateResizeCorner2.CenterX = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner2).X;
this.rotateResizeCorner2.CenterY = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner2).Y;
this.rotateResizeCorner3.CenterX = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner3).X;
this.rotateResizeCorner3.CenterY = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner3).Y;
this.rotateResizeCorner4.CenterX = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner4).X;
this.rotateResizeCorner4.CenterY = this.ParentLayer.TranslatePoint(this.rotationCenter, this.resizeCorner4).Y;
this.rotateRotationSign.CenterX = this.ParentLayer.TranslatePoint(this.rotationCenter, this.rotationSign).X;
this.rotateRotationSign.CenterY = this.ParentLayer.TranslatePoint(this.rotationCenter, this.rotationSign).Y;

根据角度,矩形周围所有元素的中心都应该改变,但矩形本身的中心应始终为 32,32。 但是值有偏差,X 和 Y 的值都在 29 到 35 之间。 我已经检查了 rotationCenter 的计算,它是正确的。 为什么会出现这种偏差,我该如何解决? 谢谢...

好吧,既然没人知道,我决定绕过这个问题而不是实际解决它。所以现在我计算相对旋转中心 "manually"。我不确定这是否对任何人有帮助,但它对我有用。

this.rotateSurroundingRectangle.CenterX = (this.surroundingRectangle.Width * 0.5);
this.rotateSurroundingRectangle.CenterY = (this.surroundingRectangle.Height * 0.5);
this.rotateResizeCorner1.CenterX = this.rotationCenter.X - Canvas.GetLeft(this.resizeCornerA);
this.rotateResizeCorner1.CenterY = this.rotationCenter.Y - Canvas.GetTop(this.resizeCornerA);
this.rotateResizeCorner2.CenterX = this.rotationCenter.X - Canvas.GetLeft(this.resizeCornerB);
this.rotateResizeCorner2.CenterY = this.rotationCenter.Y - Canvas.GetTop(this.resizeCornerB);
this.rotateResizeCorner3.CenterX = this.rotationCenter.X - Canvas.GetLeft(this.resizeCornerC);
this.rotateResizeCorner3.CenterY = this.rotationCenter.Y - Canvas.GetTop(this.resizeCornerC);
this.rotateResizeCorner4.CenterX = this.rotationCenter.X - Canvas.GetLeft(this.resizeCornerD);
this.rotateResizeCorner4.CenterY = this.rotationCenter.Y - Canvas.GetTop(this.resizeCornerD);
this.rotateRotationSign.CenterX = this.rotationCenter.X - Canvas.GetLeft(this.rotationSign);
this.rotateRotationSign.CenterY = this.rotationCenter.Y - Canvas.GetTop(this.rotationSign);