В WPF после DoubleAnimation свойство UIElement нельзя изменить? - PullRequest
3 голосов
/ 06 июня 2009

ОК, я создаю графический интерфейс для моего MP3-плеера, используя WPF, и у меня есть граница, которая увеличивает его свойство ширины на каждую секунду воспроизводимого трека, таким образом, создавая «Индикатор прогресса» для текущей воспроизводимой песни. Я назвал границу ProgressBarBorder. После того, как весь плейлист завершен, я хотел использовать DoubleAnimation для исчезновения границы. Теперь, если я снова запускаю проигрыватель, граница реагирует так, как она должна (это означает, что ширина начинается с 0 и продолжается до конца песни), но свойство непрозрачности по какой-то странной причине остается равным 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();
    ....
}

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

Ответы [ 3 ]

6 голосов
/ 13 апреля 2012

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

private void PlayTrack()
{
    ProgressBarBorder.BeginAnimation(Border.OpacityProperty, null);
    ProgressBarBorder.Opacity = 1.0;
    ....
}
4 голосов
/ 07 июня 2009

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

0 голосов
/ 07 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...