Silverlight:Storyboard的Completed事件处理程序延迟

3
故事板完成事件在视觉动画完成后延迟约半秒钟后被调用。希望有更多人检查我的故事板XAML。
    <Storyboard x:Key="blaAnimation" Completed="storyBoard_Completed">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="bla1" Storyboard.TargetProperty="Offset" Completed="bla_Completed">
            <DiscreteDoubleKeyFrame KeyTime="0:0:0" x:Name="bla1StartKeyFrame"/>

            <EasingDoubleKeyFrame Value="-10.2" KeyTime="0:0:1">
                <EasingDoubleKeyFrame.EasingFunction>
                    <PowerEase EasingMode="EaseIn"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>

            <EasingDoubleKeyFrame KeyTime="0:0:2" Value="-20" x:Name="bla1Animation">
                <EasingDoubleKeyFrame.EasingFunction>
                    <ElasticEase EasingMode="EaseOut" Oscillations="5" Springiness="20"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>
        </DoubleAnimationUsingKeyFrames>

        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="bla2" Storyboard.TargetProperty="Offset" BeginTime="0:0:0.1" Completed="bla2_Completed">
            <DiscreteDoubleKeyFrame Value="0" KeyTime="0:0:0.1" x:Name="bla2StartKeyFrame"/>

            <EasingDoubleKeyFrame Value="-10.2" KeyTime="0:0:1.1">
                <EasingDoubleKeyFrame.EasingFunction>
                    <PowerEase EasingMode="EaseIn"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>

            <EasingDoubleKeyFrame KeyTime="0:0:2.1" Value="-20" x:Name="bla2Animation">
                <EasingDoubleKeyFrame.EasingFunction>
                    <ElasticEase EasingMode="EaseOut" Oscillations="5" Springiness="20"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>
        </DoubleAnimationUsingKeyFrames>

        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="bla3" Storyboard.TargetProperty="Offset" BeginTime="0:0:0.18" Completed="bla3_Completed">
            <DiscreteDoubleKeyFrame Value="0" KeyTime="0:0:0.2" x:Name="bla3StartKeyFrame"/>

            <EasingDoubleKeyFrame Value="-10.2" KeyTime="0:0:1.2">
                <EasingDoubleKeyFrame.EasingFunction>
                    <PowerEase EasingMode="EaseIn"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>

            <EasingDoubleKeyFrame KeyTime="0:0:2.2" Value="-20" x:Name="bla3Animation">
                <EasingDoubleKeyFrame.EasingFunction>
                    <ElasticEase EasingMode="EaseOut" Oscillations="5" Springiness="20"/>
                </EasingDoubleKeyFrame.EasingFunction>
            </EasingDoubleKeyFrame>
        </DoubleAnimationUsingKeyFrames>


    </Storyboard>

提前感谢您的帮助, --Ran.


你期望它动画多长时间?最长的动画是2.2秒(最短为2秒),因此故事板应该在开始后2.2秒结束。你是说它在大约2.7秒执行事件,还是只是动画在事件触发前0.5秒结束? 没有完整的XAML,我无法确定动画是否仅在您预期之前结束。 - iCollect.it Ltd
HiTech Magic,在 Blend 中播放时,运行时间确切为2.4秒,而不是2.2秒。在视觉上观察或播放一些音效时也能明显感觉到这一点。为了给您提供完整的 XAML 代码,我需要将这个故事板包装在一个独立的 XAML 文件中,因为目前它正在控制一个自定义控件。我想也许我在故事板声明方面漏掉了什么东西。 - Ran
由于您拥有Blend(这是个好消息),2.4秒的时间表明其中一个单独的更改运行时间超出了预期。如果您将时间滑块位置设置为2.4秒,那么该行是否有任何更改?顺便说一句,声音可能会有启动延迟-添加一个视觉指示器来检查这一点,而不是依赖声音。 - iCollect.it Ltd
HiTech Magic,就像现在这样,在缓和函数上它在2.2秒时设置了最后一个值,并停留了0.2秒。我已经删除了缓和函数并在Blend中重新滚动了动画,我可以看到它只在2.4秒内达到目标值(-20),而在2.2秒时它还没有完成(-18),有任何想法为什么? - Ran
好的,我采纳了你的建议,并在Blend中调整了一下参数并滚动了一下插值。显然我有两个问题:首先,由于某种奇怪的原因,BeginTime在最后添加了一个大的延迟;其次,Easing函数比KeyTime更快地达到目标值,所以屏幕上什么也没有发生,只是等待。无论如何,感谢你的Blend建议,我一开始愚蠢地手动创建了动画,没有使用Blend的帮助。 - Ran
1个回答

1

疑惑时,混合使用

继续上面的评论,最终结果是“如果您可以访问它(或负担得起),请始终使用Expression Blend创建动画故事板”

Blend是学习动画的最佳方式,可以很容易地变得非常复杂。Blend还会自动为您优化某些动画。

如您所知,VS 2010根本不支持编写动画,除了使用XAML外,那样容易出错。仅凭文本难以在脑海中可视化多个动画:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接