WPF面板旋转?

3

我有一个自定义的六边形菜单在WPF中,想要旋转它。 这是旋转代码:

 hexagonMenu1.RenderTransform = new RotateTransform(i,hexagonMenu1.Hexagon.ContainerRect.Width / 2, hexagonMenu1.Hexagon.ContainerRect.Height / 2);

当我调用这段代码超过一次时,面板没有旋转,怎么办?

谢谢。


请注意,每次单击时都要创建一个新的RotateTransform。 - Klaus78
2个回答

3

您需要增加旋转角度,即使用参数i来进行RenderTransform。

还可以重复使用现有的RenderTransform并增加其Angle属性:

hexagonMenu1.RenderTransform = new RotateTransform(0, hexagonMenu1.Hexagon.ContainerRect.Width / 2, hexagonMenu1.Hexagon.ContainerRect.Height / 2);
...
double deltaRotation = ...
// do the following for every rotation cycle
((RotateTransform)hexagonMenu1.RenderTransform).Angle += deltaRotation;

您可能还可以考虑动画旋转角度,这样可以消除循环递增旋转角度的需要:

了解详情

DoubleAnimation animation =
    new DoubleAnimation(360, TimeSpan.FromSeconds(10));

((RotateTransform)hexagonMenu1.RenderTransform).BeginAnimation(
    RotateTransform.AngleProperty, animation);

第一次调用时仍然旋转,但只要我调用它超过一次,就没有旋转了。 - Moataz Aahmed Mohammed
谢谢你的所有帮助,现在一切都正常了。问题出在创建新实例的旋转变换上,必须为所有旋转操作使用一个对象,并且每次旋转形状时只需增加旋转角度即可。 - Moataz Aahmed Mohammed

1

你需要明白的是,你所编写的代码并不是“旋转六边形”,而是“设置六边形的旋转角度”。

你认为你的代码在做什么是:“旋转30度。再旋转30度。现在我已经旋转了60度。”

实际上,你的代码是这样做的:“将旋转角度设置为30度。再将旋转角度设置为30度。旋转角度被设置为30度。”

无论你调用代码多少次,它都不会导致进一步的旋转。你需要改变代码,使得在设置旋转之前i的值不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接