Реверс анимации в Silverlight при нажатии кнопки или любом другом событии

Как мне отменить двойную анимацию в Silverlight для события? Например, предположим, что у меня есть эллипс в качестве пути, и я перемещаю фигуру по этому пути в бесконечном цикле. Если я нажимаю кнопку, я хочу изменить направление вращения (по часовой ‹-> против часовой стрелки).

Чтобы быть более конкретным, я использую объект PathListBox, который является новым в SL4. У него есть начальное свойство от 0 до 100% (двойное значение от 0 до 1), которое поместит первый элемент в указанное место на пути. Анимируя это свойство от 0 до 1 и от 1 до 0, я могу заставить объект вращаться по часовой стрелке и против часовой стрелки.

Допустим, у меня есть кнопка, и при нажатии кнопки я хочу изменить направление. Как мне это сделать? Я пытался приостановить анимацию и поменять местами значения To и From анимации и возобновить ее, но это приводит к скачку анимации. Таким образом, если на эллипсе он находится в положении «3 часа», он перескакивает на «9 часов» и оттуда идет назад. Я попытался сделать что-то вроде установки свойства CurrentTime раскадровки на «Duration - CurrentTime», но это свойство, похоже, не может быть установлено.

Итак, в заключение, есть идеи о том, как отменить анимацию по требованию?

PS: я знаю, что есть PathListBoxUtils, который обеспечивает поведение прокрутки для PathListBox, но это не совсем то, что я хочу. Или, другими словами, я хочу изменить PathListBoxUtils, чтобы иметь бесконечно вращающуюся реверсивную карусель, а не прокручивать один элемент за раз.


person Chaitanya    schedule 13.07.2010    source источник


Ответы (1)


Хорошо, я заставил это работать, приостановив анимацию, поменяв местами значения «Кому» и «От» и используя метод Seek для перемещения анимации вперед на заданную величину. Сумма, которая мне нужна для продвижения вперед, - это «Duration.TimeSpan() - GetCurrentTime()», но доступ к Duration, похоже, вызывает исключение (операция недействительна для текущего состояния объекта).

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

person Chaitanya    schedule 13.07.2010
comment
Я поступил примерно так же в похожей ситуации. Моя проблема с получением StoryBoard.Duration заключалась в том, что значение было Automatic, и мне пришлось перейти к фактическим классам анимации в раскадровке и получить их продолжительность. - person Martin Liversage; 15.07.2010