0

コードビハインドでストーリーボードを作成し、それを相互にチェーンして複数回実行することに失敗しました。どういうわけか、ストーリーボードはコンテキストを維持しているようで、リセットされません。

いくつかの要素をアニメーション化しており、X回アニメーションメソッドを再帰的に実行していますが、Completedイベントでのコールバックアクションが異なります。最初のアニメーションは正常に実行されますが、残りのアニメーションはまったくアニメーション化されません(完了したイベントが発生します)。

メソッドでStoryBoardを作成して実行した場合、完了後に破棄しないでください。私はやろうとしていますstoryboard.Remove()

private void SlideLeft(int numberOfStepsToSlide)
{
    if (numberOfStepsToSlide < 1) return;
    Slide(() => SlideLeft(numberOfStepsToSlide - 1));
}

protected void Slide(Action callBackAfterAnimation = null)
{
    var sb = new Storyboard();
    sb.FillBehavior = FillBehavior.Stop; //i thought maybe this would fix it, but no

    //..
    //.. a number of double animations created and added to storyboard
    //..

    sb.Completed += (sender, e) =>
                        {
                            sb.Stop();
                            sb.Remove();

                            //..
                            //..sending message to ViewModel and manipulating values
                            //..

                            if (callBackAfterAnimation != null)
                                callBackAfterAnimation();
                        };
    sb.Begin();
}

御時間ありがとうございます!

4

1 に答える 1

0

申し訳ありませんが、この質問を完全に忘れてしまいました!

呼び出したくないRemove-基本的に、アニメーションを実行するために作成されたすべてのアニメーションクロックを強制終了することで、アニメーションを強制終了します...代わりに次のようなものを試してください(手っ取り早い例):

var win = new Window();
win.Width = 50;
win.Height = 50;

int runCount = 3;
int halfSteps = runCount * 2;
double toWidth = 500.0;

var sb = new Storyboard();  
var biggerator = new DoubleAnimation(toWidth, new Duration(TimeSpan.FromSeconds(2)));
sb.Children.Add(biggerator);
Storyboard.SetTarget(biggerator, win);
Storyboard.SetTargetProperty(biggerator, new PropertyPath("Width"));

sb.Completed += (o,e) => 
{ 
    sb.Stop();          
    halfSteps--;
    if(halfSteps <= 0)
    {
        win.Height = 150;
    }
    else
    {
        biggerator.To = biggerator.To == 0 ? toWidth : 0;
        sb.Begin();
    }
};

sb.Begin();     
win.Show();
于 2013-04-03T20:44:24.780 に答える