Как отменить или повторить RotateTransform?

Я последовал за учебником по повороту картинки, привязанной к кнопке, и это должно быть довольно просто, но я не могу понять это.

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 градусов. Анимация работает отлично, но результат всегда переключается на поворот изображения на 90 градусов независимо от того, для чего я установил второй rotateAngle .

В основном то, что я получаю, находится в первой части картины, мне нужно, чтобы во второй части.

В основном то, что я получаю, находится в первой части Pic, я хочу, чтобы во второй части.

Что я здесь делаю неправильно? Почему я не могу снова повернуть изображение? Я пробовал с -90, 90 и множество других значений, например, 45 градусов, но нет вращения?

Всего 1 ответ


Это потому, что изображение на самом деле не повернуто, но оно только повернуто. Пока rendertransform не получит новое преобразование, он будет вращаться.

Это повернет его обратно, чтобы вы могли попробовать:

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

используйте toValue параметр 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 изменит свойство.


Есть идеи?

10000