如何定期动画?

时间:2013-01-11 07:21:58

标签: c# xaml windows-8 windows-runtime winrt-xaml

我有一个故事板,动画分针可以滑动6度。现在我希望分针永远每隔59秒滑动一次。是否有故事板的任何属性或我可以做的任何其他方式?

我的故事板

<Storyboard
                                    x:Name="myStoryboard2">
                                    <DoubleAnimation
                                        x:Name="minuteAnimation"
                                        Storyboard.TargetName="minHandTransform"
                                        Storyboard.TargetProperty="Angle"
                                        Duration="0:0:1"
                                        From="{Binding Time, Converter={StaticResource minuteHandTransform}}"
                                        To="{Binding Time, Converter={StaticResource minuteHandTransform}}"
                                        RepeatBehavior="1x">
                                        <DoubleAnimation.EasingFunction>
                                            <SineEase
                                                EasingMode="EaseOut" />
                                        </DoubleAnimation.EasingFunction>
                                    </DoubleAnimation>
                                </Storyboard>

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

<Storyboard
                                x:Name="myStoryboard2">
                                <DoubleAnimation
                                    x:Name="minuteAnimation"
                                    Storyboard.TargetName="minHandTransform"
                                    Storyboard.TargetProperty="Angle"
                                    Duration="0:0:59"
                                    From="{Binding Time, Converter={StaticResource minuteHandTransform}}"
                                    To="{Binding Time, Converter={StaticResource minuteHandTransform}}"
                                    RepeatBehavior="Forever">
                                    <DoubleAnimation.EasingFunction>
                                        <SineEase
                                            EasingMode="EaseOut" />
                                    </DoubleAnimation.EasingFunction>
                                </DoubleAnimation>
                            </Storyboard>

答案 1 :(得分:1)

这听起来不像是你想依靠动画来管理的东西。只需管理从每分钟后面的代码启动动画,您就完成了。这样做比使用神秘的转换器来控制From / To值要容易得多。 DoubleAnimation等时间轴具有BeginTime属性,但我已经看到并验证了长动画持续时间(如1分钟或更长时间)在WinRT中遇到错误的报告。

编辑*(代码样本)

我通常用于间隔触发事件的两种简单方法是使用带有回调事件或异步循环的DispatcherTimer。

1。 DispatcherTimer

var timer = new DispatcherTimer { Interval = TimeSpane.FromSeconds(1) };
timer.Tick += (s, e) => { /* do your stuff */ };
timer.Start();

2。异步循环

RunMyLoop();

private async void RunMyLoop()
{
    while (true)
    {
        /* do your stuff */
        await Task.Delay(1000);
    }
}