私のコントロールを回転させるアニメーションを作成しましたが、トリガートのときは最終位置にジャンプしてただちに開始位置に戻ります。WP7 - アニメーションが早すぎると効果が残りません。
コントロールは後ろコードから作られ、以下の特性を有するテキストボックスされている。
FontSize = 45;
TextAlignment = TextAlignment.Center;
Widh = 40;
Heigh = 45;
Iは、アレイ内のテキストボックスを格納するので、私は次のコードでアニメーションをトリガーする:
foreach (TextBlock b in arrayOfTextBoxes)
{
Rotate(b);
}
アニメーション:
public static void Rotate(UIElement target)
{
var projection = new PlaneProjection();
target.Projection = projection;
DoubleAnimation da = new DoubleAnimation();
da.From = 0;
da.To = 90;
da.Duration = TimeSpan.FromSeconds(0.25);
da.AutoReverse = false;
Storyboard.SetTargetProperty(da, new PropertyPath(PlaneProjection.RotationZProperty));
Storyboard.SetTarget(da, projection);
Storyboard sb = new Storyboard();
sb.Children.Add(da);
EventHandler eh = null;
eh = (s, args) =>
{
projection.RotationZ = 90;
sb.Stop();
sb.Completed -= eh;
};
sb.Completed += eh;
sb.Begin();
}
EDIT:今私はpropably問題が何であるか知っている。 Dispatcher Timesはバックグラウンドで毎秒1回(時には2回)ディスカッションします。私がそれらを無効にすると、probleはなくなりました。しかし、私は時間を測定する必要があるので、私はそれを行うことはできません。 アニメーションをトリガーする直前にそれらを停止し、それらを再び開始することは役に立たない。 // DispetcherTimersは、次の操作を行います。「彼らが停止されるまで、」
void tikac_Tick(object sender, EventArgs e)
{
herniCas += new TimeSpan(0, 0, 1);
}
あなたの質問に答えがありません。ちょっとした提案です:あなたは 'EventHandler eh' varを作成する必要はありません。代わりに匿名デリゲートを使うことができます。 – jv42
@ jv42: 'eh'変数を使用するパターンは、実行後にデリゲートをイベントから削除できるため、一般的には良い方法です。 – AnthonyWJones
ちょうど確かめて、あなたはアニメーションの期間が非常に速いIEの四分の一になることを意図します。最終的な位置へのジャンプは、非常に速くアニメーション化された後、ストーリーボードが完了したイベントを実行するだけではないのですか? –