Связанная анимация воспроизводится более одного раза

Я использую MVVM и столкнулся с ситуацией, когда мне нужна кнопка для запуска анимации. Итак, я установил для него EventTrigger, и он запускает эту анимацию:

<DoubleAnimation 
    (...)
    From="{Binding ElementName=Browser, Path=DataContext.TooltipPosition}"
To="150"/>

Проблема в том, что я не хочу, чтобы эта анимация воспроизводилась более одного раза. Таким образом, после первого нажатия кнопки он должен меняться от 0 до 150, а для всех последующих кликов он не должен быть виден, поэтому он должен меняться от 150 до 150.
В моей ViewModel у меня есть свойство TooltipPosition, для которого установлено значение 0. Я создал команду для моей кнопки, которая устанавливает для этого свойства значение 150 и вызывает.

PropertyChanged(this, new PropertyChangedEventArgs("TooltipPosition").

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

Как я могу это исправить?

-редактировать-

Да, извините, я не включил всю информацию. Я пытаюсь анимировать множество объектов, чтобы только один из них был виден. Поэтому, если пользователь меняет выбор объекта в графическом интерфейсе, анимация должна снова начинаться с 0 до 150. И очевидно, что если бы элемент А был анимирован, затем В, а затем снова А, то эта анимация не была бы видна.

-редактировать2-

Я анимирую ширину TextBlock. Дело в том, что у меня есть несколько текстовых блоков (привязки данных), и только один или ни один из них не должен быть виден в любое время. Итак, я связываю свойство Width каждого TextBlock и анимирую, так что в основном все они находятся под влиянием этой анимации. Но только один из них может быть виден, так что это работает.


person jacek11    schedule 13.07.2012    source источник
comment
Я не уверен, что это хорошая идея - включать в ViewModel вещи, связанные исключительно с представлением, такие как анимация. MVVM не означает отсутствие кода в коде позади. Это означает, что то, что не связано исключительно с представлением, должно быть помещено в ViewModel. Лично я могу избегать использования привязок в вашем конкретном случае использования.   -  person ken2k    schedule 13.07.2012


Ответы (1)


Вы можете не указывать значение From.

См. раздел Примечания в Двойная анимация.Кому:

Анимация переходит от базового значения анимированного свойства или выходного значения предыдущей анимации к значению, указанному свойством To.

person Clemens    schedule 13.07.2012
comment
Да, извините, я не включил всю информацию. Я пытаюсь анимировать множество объектов, чтобы только один из них был виден. Поэтому, если пользователь меняет выбор объекта в графическом интерфейсе, анимация должна снова начинаться с 0 до 150. И очевидно, что если бы элемент А был анимирован, затем В, а затем снова А, то эта анимация не была бы видна. - person jacek11; 13.07.2012
comment
Что вы анимируете? Если это свойство ваших объектов A и B, оно должно работать только с установкой значения анимации To. - person Clemens; 13.07.2012
comment
Я анимирую ширину TextBlock. Дело в том, что у меня есть несколько текстовых блоков (привязки данных), и только один или ни один из них не должен быть виден в любое время. Итак, я связываю свойство Width каждого TextBlock и анимирую, так что в основном все они находятся под влиянием этой анимации. Но только один из них может быть виден, так что это работает. - person jacek11; 13.07.2012