XAML - Windows Phone 8,使用Pivot控件加载缓慢
本文关键字:Pivot 控件 加载 缓慢 使用 Windows Phone XAML | 更新日期: 2023-09-27 18:16:27
我有一个Windows Phone 8应用程序,我想看看为什么我的主页加载得很慢。
My Home page的结构如下:
<PivotControl>
<PivotItem>
<LongListSelector/>
</PivotItem> Times 5
</PivotControl>
我总共有5个PivotItems,每个项目都有自己的api调用来获取项目,以便它可以显示它们。每个Pivot Item一开始加载12个元素,当用户开始滚动时加载更多元素。
我的问题是,有没有人遇到过这个问题,有一个沉重的主页与许多元素?你做了什么改进,使页面加载速度更快?我已经减少了我显示的元素数量(在我在每个PivotItem中加载40个元素之前)。
编辑:我的listtitemtemplate非常干净(我已经清理了它,使它在XAMLcode中更轻)它有一个网格,em-globes和InvokeCommandAction,一个图像,一个边界和3个TextBlocks
Edit2:当用户不在我的PivotItem上时,我通过折叠我的不同LongListSelector获得了大约30%的加载时间,因此我隐藏了2个LongListSelector。我正在显示PivotItem,它在中间(当然)和左边,当用户向左或向右滑动时,我重新加载并隐藏必要的元素。它不漂亮,但它有帮助。
EDIT3:几乎(90%)我所有的样式都已经放置在我的StylePage中,并被调用来样式化我的元素。我发现,在用户进入和离开页面时添加一点动画,可以让我在页面之间有更好的过渡。下面是我的经典过渡代码:
<toolkit:TransitionService.NavigationInTransition>
<toolkit:NavigationInTransition>
<toolkit:NavigationInTransition.Backward>
<toolkit:TurnstileTransition Mode="BackwardIn" />
</toolkit:NavigationInTransition.Backward>
<toolkit:NavigationInTransition.Forward>
<toolkit:TurnstileTransition Mode="ForwardIn" />
</toolkit:NavigationInTransition.Forward>
</toolkit:NavigationInTransition>
</toolkit:TransitionService.NavigationInTransition>
<toolkit:TransitionService.NavigationOutTransition>
<toolkit:NavigationOutTransition>
<toolkit:NavigationOutTransition.Backward>
<toolkit:TurnstileTransition Mode="BackwardOut" />
</toolkit:NavigationOutTransition.Backward>
<toolkit:NavigationOutTransition.Forward>
<toolkit:TurnstileTransition Mode="ForwardOut" />
</toolkit:NavigationOutTransition.Forward>
</toolkit:NavigationOutTransition>
</toolkit:TransitionService.NavigationOutTransition>
我在你的问题中没有看到两件事,但我想我应该补充一下,这会对你有所帮助。
- 不要在构造函数或Loaded事件中加载/初始化你的数据,因为它们与UI控件绑定在一起。这将冻结UI。
- 始终对源进行异步调用,这将允许UI在任务完成时继续。
- 使用OnNavigatedTo(缓存数据,如果大量数据通过网络流),并使用异步方法。
我猜你在MainPage构造函数中有太多密集的代码。无论哪种方式,你都可以使用Task.Run
在不同的线程中加载数据和/或使用MainPage.Loaded
事件在这里做你的事情。
也试着限制你在App.xaml.cs
(构造函数,启动方法)中的代码
使用Task.Run
时,不要忘记使用Dispatcher.BeginAction
来操作UI。
也有Scheduler.Dispatcher.Schedule()
调用延迟方法