2009-06-06 2 views
3

ОК, я создаю графический интерфейс для своего MP3-плеера, используя WPF, и у меня есть граница, которая увеличивает свою ширину на каждую секунду воспроизводимой дорожки, тем самым создавая «Progress Bar» для текущей песни. Я назвал границу ProgressBarBorder. После того как весь плейлист завершен, я хотел использовать DoubleAnimation для постепенного исчезновения границы. Теперь, если я снова запустил игрока, граница реагирует так, как предполагается (значение ширины начинается с 0 и продолжается до конца песни), но свойство непрозрачности по какой-то странной причине остается 0.0 (то есть значение, которое DoubleAnimation наборы). Я явно закодировалВ WPF после свойства DoubleAnimation UIElement изменить нельзя?

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(); 
    .... 
} 

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

ответ

4

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

+1

Кроме того, установка значения явно волей «козырной» анимации и привязок и сделать их больше не применять –

+1

@Paul: на самом деле, анимированных значений имеют приоритет над локально заданными значениями. См. Http://msdn.microsoft.com/en-us/library/ms743230.aspx. –

+0

Отличный ответ. Очень полезно для той же проблемы, с которой я столкнулся с анимацией роста. – TalkingCode

6

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

private void PlayTrack() 
{ 
    ProgressBarBorder.BeginAnimation(Border.OpacityProperty, null); 
    ProgressBarBorder.Opacity = 1.0; 
    .... 
} 
Смежные вопросы