Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 相对于父元素的中心旋转子元素_C#_Wpf_Rotation_Image Rotation - Fatal编程技术网

C# 相对于父元素的中心旋转子元素

C# 相对于父元素的中心旋转子元素,c#,wpf,rotation,image-rotation,C#,Wpf,Rotation,Image Rotation,我需要相对于WPF中父元素的中心旋转子元素。想象你有一张地图,正看着芝加哥,它就在你屏幕的中央。您希望能够围绕屏幕中心旋转地图 用户可以平移地图上的任何位置,但旋转始终相对于父元素的中心 最初,我对父元素执行了RotateTransform,效果很好,但在旋转之后,父元素的平移功能无法正常工作。(如果旋转180度,然后向右平移,子元素将向左而不是向右移动。)因此,我能想到的旋转贴图的唯一方法是相对于父元素的中心旋转子元素 要在RotateTransform上设置旋转中心,我找到父对象的中心并使用

我需要相对于WPF中父元素的中心旋转子元素。想象你有一张地图,正看着芝加哥,它就在你屏幕的中央。您希望能够围绕屏幕中心旋转地图

用户可以平移地图上的任何位置,但旋转始终相对于父元素的中心

最初,我对父元素执行了
RotateTransform
,效果很好,但在旋转之后,父元素的平移功能无法正常工作。(如果旋转180度,然后向右平移,子元素将向左而不是向右移动。)因此,我能想到的旋转贴图的唯一方法是相对于父元素的中心旋转子元素

要在
RotateTransform
上设置旋转中心,我找到父对象的中心并使用TranslatePoint:

var p = new Point(ContainerWidth / 2, ContainerHeight / 2);
var container = VisualTreeHelper.GetParent(_visualContainer) as UIElement;
var p2 = _visualContainer.TranslatePoint(p, container);
CenterOfRotation = new Point(p2.X / 2, p2.Y / 2);

我对WPF有些陌生,不知道该怎么做才能使这张地图正确旋转。

因此,经过数小时的搜索和工作,我发现问题的根源是地图的平移,而不是地图的旋转


因为地图是旋转的,然后用户平移进行平移计算时需要旋转的平移点。我在写这篇文章时意识到,也许这就是克莱门斯所说的,首先进行平移,然后将贴图旋转回所需的角度。

您应该尝试解决原始问题,只需按照正确的顺序执行父对象的平移(平移)和旋转。先翻译,然后旋转。是的,我已经在翻译,然后旋转了