Windows Phone 7页面转换工具包非常缓慢

7

我有一个问题,每当我使用Windows Phone 7 Toolkit中的页面过渡时,转换非常慢,整个应用程序似乎都存在帧率下降。动画会有"卡顿"。

还有其他人有这种经验吗? 我正在使用TransitionFrame类作为RootFrame,在.xaml页面中我使用了类似于以下代码:

<toolkit:TransitionService.NavigationInTransition>
        <toolkit:NavigationInTransition>
            <toolkit:NavigationInTransition.Backward>
                <toolkit:TurnstileTransition Mode="BackwardIn"/>
            </toolkit:NavigationInTransition.Backward>
            <toolkit:NavigationInTransition.Forward>
                <toolkit:SlideTransition Mode="SlideDownFadeOut" />
            </toolkit:NavigationInTransition.Forward>
        </toolkit:NavigationInTransition>
    </toolkit:TransitionService.NavigationInTransition>

这些卡顿的动画也可以在PhoneToolkitSample中看到。当您多次单击[查看所选转换]按钮时,每次动画运行的平滑度都不相同。我认为,在设备上也是如此...我明天会测试一下。 - j00hi
4个回答

9
我建议不要使用WP7 Toolkit页面过渡动画。
如果您激活性能计数器,您会发现仅通过将根框架更改为WP7框架,您的填充率就增加了1。由于即使在最好的应用程序中,填充率也为1.5+,而推荐的最大值为2.5,因此我认为这非常糟糕。
Telerik有一个WP7页面过渡控件,您可能想要查看一下。但是,老实说,我找不到/编写任何通用页面转换,可以提供良好的页面翻转效果。

1
我现在尝试直接将工具包中的故事板(如TurnstileForwardIn等)应用于我的页面中的LayoutRoot容器(例如,在OnNavigatedTo方法中)。现在动画似乎运行得非常流畅!你认为为什么工具包的性能会那么差?是因为工具包正在对PhoneApplicationPage(或Frame?)进行动画处理,而当我编写自己的动画时,我可以对更快的LayoutRoot容器进行动画处理吗?另一个问题是:如何激活这些性能计数器? - j00hi
1
请在 App.xaml.cs 构造函数中使用 Application.Current.Host.Settings.EnableFrameRateCounter = true; 来启用帧率计数器。 - murki
@j00hi,你是如何直接应用storyboards的?我也遇到了同样的问题,想尝试一下。 - Mac
@Mac 你需要下载源代码(http://silverlight.codeplex.com/SourceControl/list/changesets),然后在Transitions/Storyboards文件夹中找到故事板。接着,你可以通过`Storyboard storyboard = Application.Current.Resources[storyboardName] as Storyboard; Storyboard.SetTarget(storyboard, element); storyboard.Begin();`等方式将它们应用于LayoutRoot上。 - j00hi

3

最新变更集包括了一些过渡效果的性能优化。您可以尝试使用它们。

页面上的内容也会影响性能。它是否包含大量内容?或者是否有被过渡触发的任何事件/故事板?


谢谢提供链接。不幸的是,最新的更改集并没有改善情况。我的页面上没有太多内容。基本上只有一个ListBox,在Loaded事件处理程序函数中填充静态数据。我正在使用工具包和ControlTiltEffect在页面上 - 就这些。 - j00hi

1
银光工具包的新版本(8月11日)比旧版更快!在单击项目后,转换动画会立即开始。试一试,最终您还需要更改其他库(例如Microsoft.Phone.Controls),如下所示:
C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Libraries\Silverlight

工具包可以在以下位置找到:

C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Aug11

1

这个链接可能会有所帮助,

每一帧都使用背景画刷颜色来绘制框架,同时也绘制页面。

最引人注目的是它正在绘制与其背后相同的背景颜色。如果所选主题具有深色背景,则在黑色上绘制黑色。或者,如果主题具有浅色背景,则在白色上绘制白色。

如果我们将TransitionFrame正在做的不必要工作与任何透明内容不会影响填充率的事实相结合,就会出现一个解决方案。我们只需要使TransitionFrame的背景透明即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接