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

本文关键字:元素 相对于 旋转 | 更新日期: 2023-09-27 18:05:42

我需要在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有点陌生,不知道该怎么做才能让这个地图正确旋转。

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

所以经过几个小时的搜索和工作,我发现问题的根源是地图的平移,而不是地图的旋转。

因为地图是旋转的,然后用户进行平移,平移点需要在进行平移计算时进行旋转。当我写这篇文章的时候,我意识到也许这就是Clemens所说的,先做平移,然后把地图旋转到想要的角度。