В WPF после DoubleAnimation свойство UIElement нельзя изменить?

Хорошо, я создаю графический интерфейс для своего MP3-плеера с помощью WPF, и у меня есть граница, которая увеличивает его свойство ширины для каждой секунды воспроизводимой дорожки, таким образом создавая полосу выполнения для текущей воспроизводимой песни. Я назвал границу ProgressBarBorder. После того, как весь список воспроизведения будет готов, я хотел использовать DoubleAnimation, чтобы размыть границу. Теперь, если я снова запустил проигрыватель, граница отреагирует так, как должна (это означает, что ширина начинается с 0 и продолжается до конца песни), но свойство opacity по какой-то странной причине остается 0,0 (это значение, которое DoubleAnimation наборы). Я явно закодировал

ProgressBarBorder.Opacity = 1.0;

в методе, который запускает воспроизведение. Тем не менее, он остается невидимым. Теперь, если я не использую DoubleAnimation и просто напишу

ProgressBarBorder.Opacity = 0.0; 

когда список воспроизведения завершен, он возвращается к 1.0, когда я снова запускаю проигрыватель. Это причина, по которой я уверен, что проблема в анимации. Кроме того, разве свойство не должно возвращаться в исходное состояние после завершения анимации? Если да, моя граница должна стать видимой автоматически после завершения анимации.

Вот мой частично псевдокод:

if (TrackIsComplete)
{
    DoubleAnimation Fading = new DoubleAnimation();
    Fading.From = 1.0;
    Fading.To = 0.0;
    Fading.Duration = TimeSpan.FromSeconds(3);
    ProgressBarBorder.BeginAnimation(Border.OpacityProperty, Fading);
}

и

private void PlayTrack()
{
    ProgressBarBorder.Opacity = 1.0;
    Play();
    ....
}

Может ли кто-нибудь помочь? Спасибо.


person Community    schedule 06.06.2009    source источник


Ответы (3)


Анимация сохраняет свое целевое значение. Чтобы освободить свойство зависимостей от любых анимаций, выполните BeginAnimation с нулевым значением:

private void PlayTrack()
{
    ProgressBarBorder.BeginAnimation(Border.OpacityProperty, null);
    ProgressBarBorder.Opacity = 1.0;
    ....
}
person Dennie    schedule 13.04.2012

Когда Анимация заканчивается, оно продолжает удерживать значение. Это то, что вызывает поведение, которое вы заметили, когда установка свойства не обновляет его. Вот некоторая информация о том, как установить свойство после того, как анимация была применяется к нему.

person rmoore    schedule 06.06.2009
comment
Кроме того, явная установка значения превалирует над анимацией и привязками, и они больше не применяются. - person Ana Betts; 07.06.2009
comment
@Paul: на самом деле анимированные значения имеют приоритет над локально установленными значениями. См. msdn.microsoft.com/en-us/library/ms743230.aspx. - person Kent Boogaart; 07.06.2009
comment
Отличный ответ. Очень полезно для той же проблемы, что и у меня с анимацией высоты. - person TalkingCode; 27.10.2009

Поиграйте с FillBevior на временной шкале анимации. Это может помочь: http://msdn.microsoft.com/en-us/library/system.windows.media.animation.fillbehavior.aspx

person Louis    schedule 06.06.2009