【问题标题】:In WPF, after DoubleAnimation UIElement property cannot be changed?在 WPF 中,DoubleAnimation 后 UIElement 属性无法更改?
【发布时间】:2010-10-31 21:54:10
【问题描述】:

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

有人可以帮忙吗?谢谢。

【问题讨论】:

    标签: wpf animation opacity uielement


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 另外,显式设置一个值将“胜过”动画和绑定并使它们不再适用
      • @Paul:实际上,动画值优先于本地设置的值。见msdn.microsoft.com/en-us/library/ms743230.aspx。
      • 很好的答案。对我在使用高度动画时遇到的同样问题非常有帮助。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-01
        • 1970-01-01
        • 2013-03-08
        相关资源
        最近更新 更多