XAML故事板 - 循环使用KeyFrame

时间:2013-12-30 21:32:35

标签: c# wpf windows-phone-8

所以我一直在玩Visual Studio for Windows Phone 8,并且正在探索与WP8和WPF应用程序相关的XAML标记语言。我阅读了一些关于故事板和动画与关键帧的指南,这让我想到了我的问题。除了使用Storyboard的定时动画之外,还有一种方法可以让它重复一个部分,直到按下一个按钮(点击开始,点击停止)?

<Storyboard x:Key="Storyboard1" x:Name="Testboard">
        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" Storyboard.TargetName="image">
            <SplineDoubleKeyFrame KeyTime="0" Value="0"/>
            <SplineDoubleKeyFrame KeyTime="0:0:2" Value="510.72" KeySpline="1,0,1,1" />
            <SplineDoubleKeyFrame KeyTime="0:0:5" Value="6000.43"/>
            <SplineDoubleKeyFrame KeyTime="0:0:7" Value="9000" KeySpline="0,0,0,1" />
        </DoubleAnimationUsingKeyFrames>
</Storyboard>

我有一个故事板设置,图像是一个小轮盘。动画有3个阶段:

  1. KeyTime 0:0:2表示当使用Keyspline开始慢慢旋转时,车轮开始旋转。
  2. KeyTime 0:0:5就是旋转以假动作势头的地方。
  3. KeyTime 0:0:7是减速停止的地方。
  4. 在.cs方面,我有一个按钮连接起来生成一个随机值来替换最后一个Keyframe,以便它每次都停止在不同的插槽上旋转。然后我打电话给故事板开始。

        private void btnStartWheel_Click(object sender, RoutedEventArgs e)
        {
            sb = (Storyboard)this.FindName("Testboard");
            ((SplineDoubleKeyFrame)((DoubleAnimationUsingKeyFrames)sb.Children[0]).KeyFrames[3]).Value = wheel.getAngle();
            sb.Begin();
        }
    

    我已经尝试过使用计时器,在刻度线上检查位置在故事板中的位置,如果它接近Keyframe [2]的末尾(KeyTime 0:0:5),它将使用seek()方法并将其移回框架的开头。该方法的问题在于它完全杀死动画并从值0开始,而不是从Keyframe [1]预先旋转。

    基本上我希望:

    • 按按钮开始动画。
    • 在关键帧[2]中循环而不会丢失旋转外观,直到再次按下该按钮。
    • 按下按钮后,打开循环并完成故事板。

    有一种简单的方法吗?

0 个答案:

没有答案