页面上的动画卡在背面导航上

时间:2011-12-08 04:56:01

标签: silverlight silverlight-4.0 windows-phone-7.1 windows-phone-7

Windows Phone 7.5应用程序。

Designer在Blend中创建了Home.xaml,其中包含3个带故事板动画的图像(菜单项)。 动画很简单。每张图像都会放大一点,然后一个接一个地返回正常大小。

初始加载时效果很好。现在点击一个图像将我带到另一页。

问题: 现在,当我单击后退按钮(硬件)时,我从导航页面转到我的Home.xaml,其中一个图像有点倾斜,好像它是在卡在动画中间。对于循环中的所有按钮,动画都可以正常运行,但是其中一个图像(它是随机的)会被卡住。现在这种行为是随机的,但可以复制近95%的时间。

我不确定动画如何适应页面导航周期。我尝试在OnNavigatedFrom

中明确停止动画,如下所示
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
            sbBtn1.Stop();
            sbBtn2.Stop();
            sbBtn3.Stop();
            base.OnNavigatedFrom(e);
}

它有点消除了最初的问题,但后来又出现了另一个问题。在后退导航时,3的第一个图像(即在页面导航时首先获得动画的图像)就好像它正在被放大一样。

修改

我想出了第一张图片的缩小问题。它使用0.7 scalex / y而不是0.75。

如果有人能指出我正确的方向请如何处理这个动画。

我创建的the sample复制了这个问题。获取 AnimationIssue zip文件。如果您无法下载样本,请告诉我。

如何重现:

1:单击其中一个图像转到下一页。 2:然后单击硬件后退按钮。你会看到我在说什么。如果没有尝试步骤1和2两三次。

其他:

1:如果您按照上面提到的那样注释掉停止呼叫,请按照上述步骤操作,但这次会注意到第一张Deserts图像。你会看到一个轻微的缩放。

希望有人能够指出我正确的方向。感谢。

最终问题 那我的原始版本有什么问题?我是否正确地在OnNavigatedFrom中停止动画或者我应该做其他事情吗?

我也在考虑在页面Loaded中显式调用sbBtn1 / 2/3 .Begin而不是依赖.xaml中的触发器。

2 个答案:

答案 0 :(得分:1)

我在其中一个应用中遇到了同样的动画故障。

因此,唯一的解决方法是Stop所有动画,并在导航到Home.xaml时再次使用Begin。试试这个:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
     base.OnNavigatedTo(e);

     //Stop All the animations
     sbBtn1.Stop(); 
     sbBtn2.Stop(); 
     sbBtn3.Stop(); 

     //Start them all over again
     sbBtn1.Begin(); 
     sbBtn2.Begin(); 
     sbBtn3.Begin(); 
}

答案 1 :(得分:0)

我最终将代码移动到单独的方法中停止动画。

这不仅足以停止动画,还会重置一些执行动画的特性。

OnNavigatedTo和From不仅仅是在通过元素进行导航时被调用,而且如果你的应用被电话打断或手机进入锁屏,也会被调用。

我添加了一个变量来跟踪调用OnNavigatedTo / From时的条件,并根据我调用自定义动画重置方法的情况。