【问题标题】:How can I find out the Duration of a Storyboard in Silverlight?如何在 Silverlight 中找出情节提要的持续时间?
【发布时间】:2010-12-26 13:49:51
【问题描述】:

我有一种情况,我需要确定我是否已经到达故事板的末尾,然后需要寻找到它的末尾。

我想做:

storyboard.Seek(timespan);

但是,如果时间跨度比故事板的持续时间长,我会得到一个例外。如果我看

storyboard.Duration.TimeSpan

我收到一个错误,因为持续时间是自动的。这意味着我不能做“if(timespan > storyboard.Duration.TimeSpan) ...”

一旦我知道我正在寻找的位置超出了情节提要的结尾,我只需寻找情节提要的结尾即可。我可以使用 storyboard.Seek(storyboard.Duration.TimeSpan) 来做到这一点,但同样,我不能使用 Duration,因为它是自动的。

如果我可以强制持续时间远离自动,我的所有问题似乎都可以解决。希望我只是缺少一些简单的东西。

【问题讨论】:

    标签: silverlight animation silverlight-3.0 storyboard


    【解决方案1】:

    也许我有些不明白,但如果你总是需要寻找到动画的结尾,为什么不使用 seektofill 方法呢?
    MSDN link

    此外,这里是 Storyboard Duration 结构的文档,其中解释了如何在需要时将其设置为自动以外的其他内容 - 但如果您总是需要走到最后,我会使用跳过填充方法:
    MSDN link

    【讨论】:

    • 感谢您的回答。您的建议帮助我找到了一个好的解决方案。
    【解决方案2】:

    通过查看 Egor 链接的页面,我想出了一个很好的解决方案。 (将 Egor 标记为答案以确保他获得信任。)

    在情节提要上设置持续时间是答案的一部分,但这还不够。我将此故事板用作长期运行的自定义控件的一部分 - 我不能保证自定义控件的重新样式版本将设置故事板的持续时间。

    为了解决这个问题,我首先检查持续时间是否可用。如果不是,我 SkipToFill() 到最后,并使用 GetCurrentTime() 找出故事板长度的结束。

    这是我的完整解决方案:

    public void UpdateControl()
    {
        if (!App.IsDesignTime() && storyboard != null)
        {
            TimeSpan begin = DateTime.UtcNow - OriginTime.ToUniversalTime();
            TimeSpan end;
    
            // If Storyboard.Duration is set, use it to set the animation to its correct position.
            // If it isn't set, attempt to set by seeking to the end of the animation.
            if (storyboard.Duration.HasTimeSpan)
                end = storyboard.Duration.TimeSpan;
            else
            {
                storyboard.SkipToFill();
                end = storyboard.GetCurrentTime();
            }
    
            if (begin > end)
                begin = end;
    
            storyboard.Begin();
            storyboard.Seek(begin);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 2011-09-08
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2014-04-27
      • 1970-01-01
      相关资源
      最近更新 更多