0

WPF Storyboard をいくつかのカスタム WHILE ループに置き換えて、可能かどうかを確認したいと考えています。私が持っているコードは次のとおりです。

public void RestartAnimation(int seconds)
{
            da.From = this.ActualWidth; 
            da.To = -ContentActualWidth; 
            da.RepeatBehavior = RepeatBehavior.Forever;
            da.Duration = new Duration(TimeSpan.FromSeconds(seconds));
            Timeline.SetDesiredFrameRate(da, 15);

            if (sb.Children.Count == 0)
            {
                sb.Children.Add(da);
                Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));
                Storyboard.SetTarget(da, cp);
                sb.Begin();
            }
}

その中にタイマーとWHILEがあるはずだと思います...

それがどのように行われるかについての手がかりはありますか?

ありがとう!!

4

1 に答える 1

2

ループの実行中にプログラムがフリーズするため、while やその他のループを使用しないでください。最も簡単な方法 (必ずしも最良であるとは限りません) は、フレームごとに 1 回程度実行するタイマーを設定して、1 秒間に 30 ~ 120 回実行し、アニメーションを段階的に実行して、タイマー呼び出しの間に実際に経過したリアルタイム時間を検出することです。

したがって、オブジェクトを 1 秒あたり 10 単位の速度で移動する必要があり、タイマーが短い間隔で実行される場合、最後のタイマー呼び出しが行われた時間、現在の時間を見つけて、dT(Time Change) を見つけます。 、そして dT*10 を実行し、オブジェクトをその単位数だけ移動します。

タイマーが繰り返されると、ソフトウェアがフリーズすることなくオブジェクトが移動するのがわかります。

于 2012-04-20T20:17:53.187 に答える