1

ストーリーボードを介して WP7 アプリにいくつかのアニメーションを導入しました。イベントが発生し、コード ビハインドでアニメーションを実行するコードを呼び出すと、必要な動作が正確に得られます。しかし、2 回目のトリガーを行うと、これに関連するデリゲート コードが 2 回呼び出されているようです。そして、同じイベントをトリガーし、デリゲート コードが 3 回呼び出されます。その累積。

呼び出されるコードは次のとおりです

 private void WeekForward()
    {


        FadeTitleOut.Begin();

        FadeTitleOut.Completed += delegate
        {

            StartingMonday = StartingMonday.AddDays(7);
            BuildPage();
            FadeTitleIn.Begin();
        }; 



    }

FadeTitleOut と FadeTitleIn は私の絵コンテで、アニメーション効果は問題ありません。イベントが最初に発生したときの StartingMonday が 7 日増加するだけです。次回イベントが発生すると、14 日ずつ増分されます。

デリゲート コードで本当にばかげたことをしていますか?

おそらく、コントロールの動的な生成と削除を含め、コード ビハインドでほとんどのことを行っていることを追加する必要がありますが、ストーリーボードは XAML で定義されており、XAML で定義されているコントロールを参照します (およびで生成されません)。コードビハインド)

ストーリーボード XAML は

 <phone:PhoneApplicationPage.Resources>
    <Storyboard x:Name="FadeTitleOut">
        <DoubleAnimation Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Opacity" From="1.0" To="0.0" Duration="0:0:0.3" />
    </Storyboard>

    <Storyboard x:Name="FadeTitleIn">
        <DoubleAnimation Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Opacity" From="0.0" To="1.0" Duration="0:0:0.3" />
    </Storyboard>
</phone:PhoneApplicationPage.Resources>

何か案は?

4

1 に答える 1

0

コードを見てください。私の推測では、「WeekForward()」が必要以上に頻繁に呼び出され、呼び出されるたびに FadeTitleOut.Completed をサブスクライブしています (したがって、説明している動作)。これを修正する 1 つの方法は、このコードを別の場所に配置して、Completed イベントを 1 回だけサブスクライブすることです。

また、競合状態になる可能性があるため、Begin メソッドを起動する前にイベントを書き留めておく必要があります。例えば、

    FadeTitleOut.Completed += delegate
    {

        StartingMonday = StartingMonday.AddDays(7);
        BuildPage();
        FadeTitleIn.Begin();
    }; 

    FadeTitleOut.Begin();

このコードは、XAML ページの有効期間中に 1 回実行される場所に配置してください。問題はありません。それが役立つことを願っています。

于 2012-12-12T23:23:47.880 に答える