4

当动画到达某个关键帧时,我需要调用一个方法。当动画到达某个关键帧时是否可以触发事件?如果没有,是否有更好的方法在特定时间触发事件?

4

1 回答 1

5

在事件方面,Silverlight 时间线非常有限。据我所知,仅支持 Completed 事件。但是,您可以做的是在一个故事板中拥有两个时间线,其中第二个时间线正在更新您可以观看的绑定属性。

也许是这样的:

<Storyboard>
    <DoubleAnimationusingKeyFrames ... />
    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="TriggerEvent">
        <ObjectKeyFrame KeyTime="00:00:01" Value="True" />
    <ObjectAnimationUsingKeyFrames>
</Storyboard>

然后在控件后面的代码中,定义一个名为 TriggerEvent 的 Boolean 类型的依赖项属性。当它变为 true 时,调用您的方法。

然而,另一种选择,实际上可能更好,将您的原始动画分成两个平行的时间线,并将 Completed 事件处理程序连接到第一个时间线(您将使用它来调用您的方法),然后在第二个时间线上,使用BeginTime 属性用于同步两个动画,以便第二个动画在第一个动画完成时开始播放。

<Storyboard>
    <!-- Timeline 1 -->
    <DoubleAnimationusingKeyFrames Completed="MyCompletedHandler" ... />
    <!-- Timeline 2 -->
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:01" ... />
</Storyboard>
于 2010-05-20T23:20:50.860 回答