为什么Frame.Navigating事件中的DoubleAnimation没有启动?

时间:2012-06-22 14:24:10

标签: wpf animation navigation transition

我正在尝试在页面导航之间创建淡入/淡出过渡,其实现与this非常相似。不幸的是,它没有按照我的意图行事。我的代码如下所示:

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秒的延迟。

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

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

1 个答案:

答案 0 :(得分:1)

哎呀!如果我感觉有点气馁之前,我只是勉强挖了一下。

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

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

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