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);
}

似乎在页面最初导航到之后,第一个动画没有开始,但第二个链式动画确实开始了。但是,如果我通过向后或向前跳来导航,它的行为正是我想要的方式。

第一个动画肯定会开始,因为如果我将持续时间增加到更明显的时间,比如 5 秒,那么在第二个动画开始之前会有 5 秒的延迟。

这个问题真的让我很头疼。我还没有弄清楚初始页面导航和前进/后退导航之间有什么不同。

编辑:在挖掘了更多之后,似乎第一个动画确实发生了,只是我没有看到它,因为它是上一页。所以我的问题一定是在导航到新页面后正在发生动画。

4

1 回答 1

1

啊!如果我在感到有点气馁之前再多挖一点就好了。

解决我的问题的诀窍是将我的动画放在导航事件处理程序中。不需要第一个淡出上一页的动画来达到我想要的效果。我的代码现在看起来像这样:

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

在导航处理程序中,新页面尚未完全加载,当我触发第二个动画时,它已加载,加载后启动动画看起来很糟糕。

于 2012-06-22T14:57:28.363 回答