如何反转或重复RotateTransform?

时间:2018-11-13 14:36:52

标签: c# wpf wpf-animation

我遵循了有关旋转绑定到按钮的图片的教程,这应该非常简单,但我无法弄清楚。

private void rotateMenu()
{
    int rotateAngle;

    if (menuState) rotateAngle = -90;
    else rotateAngle = 90;

    DoubleAnimation myanimation = new DoubleAnimation(0, rotateAngle, new Duration(TimeSpan.FromMilliseconds(222)));

    var rotateTransform = new RotateTransform(rotateAngle, 24.5, 24.5);
    menuButtonImage.RenderTransform = rotateTransform;

    rotateTransform.BeginAnimation(RotateTransform.AngleProperty, myanimation);

}

首先按下按钮-将图片旋转90度。简单,可行。

现在,我想反转方向或再旋转90度。 动画效果很好,但是无论我将第二个rotateAngle设置为什么,结果总是切换回旋转90度的图片。

基本上我得到的是图片的第一部分,想要我需要的是第二部分。

Basically what I get is in the first part of the Pic, want I need in the second part.

我在这里做错了什么?为什么不能再次旋转图片?我尝试使用-90、90和许多其他值,例如45度,还没有旋转吗?

1 个答案:

答案 0 :(得分:1)

那是因为图片实际上并没有旋转,而只是渲染了。在rendertransform获得新的变换之前,它将保持旋转状态。

这会将它旋转回去,所以您可以尝试:

DoubleAnimation myanimation2 = 
    new DoubleAnimation(0, new Duration(TimeSpan.FromMilliseconds(222)));

仅使用toValue参数重载将其旋转回去。


我会做类似的事情

// initial angle is 0
RotateTransform _rotateTransform = new RotateTransform(0.0, 24.5, 24.5);
Duration _rotationSpeed;

private void CreateRotation()
{
    _rotationSpeed = new Duration(TimeSpan.FromMilliseconds(222));
    menuButtonImage.RenderTransform = _rotateTransform;
}


private void rotateToSide()
{
    DoubleAnimation myanimation = new DoubleAnimation(90, _rotationSpeed);

    _rotateTransform.BeginAnimation(RotateTransform.AngleProperty, myanimation);

}

private void rotateToDefault()
{
    DoubleAnimation myanimation = new DoubleAnimation(0, _rotationSpeed);

    _rotateTransform.BeginAnimation(RotateTransform.AngleProperty, myanimation);

}

作为参考(我可以从您的代码中读取),您不必更改Angle对象的rotateTransform属性。 rotateTransform.BeginAnimation将更改属性。