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

时间:2014-05-28 19:42:35

标签: c# wpf rotation image-rotation

我需要相对于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不太感兴趣,并且不知道如何让这张地图正确旋转。

1 个答案:

答案 0 :(得分:0)

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

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