Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何定期设置动画?_C#_Xaml_Windows 8_Windows Runtime_Winrt Xaml - Fatal编程技术网

C# 如何定期设置动画?

C# 如何定期设置动画?,c#,xaml,windows-8,windows-runtime,winrt-xaml,C#,Xaml,Windows 8,Windows Runtime,Winrt Xaml,我有一个故事板,动画分针滑动6度。现在我想让分针永远每59秒滑动一次。故事板有什么特性吗?或者我可以用其他方法来实现它吗 我的故事板 <Storyboard x:Name="myStoryboard2"> <DoubleAnimation x:Name="m

我有一个故事板,动画分针滑动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>

尝试以下操作:

<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>

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

编辑*(代码示例)

我通常使用两种简单的方法来间隔触发事件,即使用具有回调事件的Dispatcher或异步循环

一,。调度员

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

RunMyLoop();

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

持续时间不是表示动画应该播放多长时间而不是何时播放吗?我真的希望这只手在1秒内滑6度,这就是为什么我把持续时间设为1秒。你知道我该怎么做吗?我该怎么每分钟从后面开始制作动画?代码在加载时不会只执行一次吗?如果你不介意的话,你能删掉一些代码吗?非常感谢,我会试试的!