在WPF中,DoubleAnimation UIElement属性后无法更改?

时间:2009-06-06 19:10:24

标签: wpf animation opacity uielement

好的,我正在使用WPF为我的MP3播放器制作一个GUI,并且我有一个边框,可以为播放曲目的每一秒扩大其宽度属性,从而为当前播放的歌曲制作“进度条”。我将边框命名为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 个答案:

答案 0 :(得分:6)

动画保持其目标值。要释放任何动画的依赖属性,请使用空值BeginAnimation执行:

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

答案 1 :(得分:4)

Animation结束时,它会继续保持该值。这是导致您注意到的行为的原因,设置属性似乎不会更新它。 Here's有关如何在应用动画后设置属性的一些信息。

答案 2 :(得分:0)

使用动画时间轴的FillBevior。这可能有所帮助: http://msdn.microsoft.com/en-us/library/system.windows.media.animation.fillbehavior.aspx

相关问题