0

これと非常によく似た実装で、ページナビゲーション間のフェードイン/フェードアウト遷移を作成しようとしています。残念ながら、それは私が意図したように動作していません。私のコードは次のようになります。

private void frame_Navigating(object sender, NavigatingCancelEventArgs e)
{
    DoubleAnimation animation = new DoubleAnimation
    {
        From = 1,
        To = 0,
        Duration = new Duration(Timespan.FromMillseconds(100))
    };
    animation.Completed += new EventHandler(animation_Completed);
    frame.BeginAnimation(OpacityProperty, animation);
}

private void animation_Completed(object sender, EventArgs e)
{
    DoubleAnimation animation = new DoubleAnimation
    {
        From = 0,
        To = 1,
        Duration = new Duration(Timespan.FromMillseconds(100))
    };
    frame.BeginAnimation(OpacityProperty, animation);
}

ページが最初に移動された後、最初のアニメーションは開始されないようですが、2番目の連鎖アニメーションは開始されます。ただし、前後にジャンプしてナビゲートすると、意図したとおりに動作します。

最初のアニメーションは間違いなく開始されています。これは、期間をより目立つ時間、たとえば5秒に増やすと、2番目のアニメーションが開始するまでに5秒の遅延があるためです。

この問題は本当に私を困惑させています。最初のページナビゲーションと進む/戻るナビゲーションの違いがわかりません。

編集:もう少し掘り下げた後、最初のアニメーションが実際に発生しているようですが、前のページであるため、表示されません。したがって、私の問題は、新しいページに移動した後にアニメーションが発生していることであるに違いありません。

4

1 に答える 1

1

ARGH!少しがっかりする前に、もう少し掘り下げただけなら。

私の問題を解決する秘訣は、アニメーションをナビゲートイベントハンドラーに配置することでした。前のページをフェードアウトする最初のアニメーションは、私が探していた効果を達成するために必要ではありませんでした。私のコードは次のようになります。

frame_Navigated(object sender, NavigatingCancelEventArgs e) 
{     
    DoubleAnimation animation = new DoubleAnimation     
    {         
        From = 0,         
        To = 1,         
        Duration = new Duration(Timespan.FromMillseconds(100))     
    };     
    frame.BeginAnimation(OpacityProperty, animation); 
} 

ナビゲーションハンドラーでは、新しいページがまだ読み込まれていませんでした。2番目のアニメーションをトリガーするまでに、ページが読み込まれ、読み込まれた後にアニメーションを開始すると、見栄えが悪くなりました。

于 2012-06-22T14:57:28.363 に答える