XAML - Windows Phone 8,使用Pivot Control缓慢加载

时间:2014-08-04 08:38:12

标签: c# xaml windows-phone-8 windows-phone

我有一个Windows Phone 8应用程序,我希望看到为什么我的主页加载速度非常慢。

我的主页具有以下结构:

    <PivotControl>
     <PivotItem>           
       <LongListSelector/>
     </PivotItem>  Times 5

   </PivotControl>

我总共有5个PivotItem,每个这些项目都有自己的api调用来获取项目,以便它可以显示它们。每个Pivot项目首先加载12个元素,并在用户开始滚动时加载更多。

我的问题是,有没有人遇到过这个有大量元素的繁重主页的问题?你做了哪些改进,以便页面可以加载更快。我已经减少了我显示的元素数量(在每个PivotItem中加载40个元素之前)。

编辑: 我的ListItemTemplate非常干净(我已经清理它以使它在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>

2 个答案:

答案 0 :(得分:2)

我在你的问题中没有看到的两件事,但我想我会补充一下这对你有用。

  1. 不要在构造函数或Loaded事件中加载/初始化数据,因为这些数据与UI控件相关联。这将冻结用户界面。
  2. 始终对源进行异步调用,这将允许UI在任务完成时继续。
  3. 使用OnNavigatedTo(如果通过网络传输大量数据,则使用缓存数据),并使用异步方法。
  4. 这些应该可以让您的用户界面快速恢复。

答案 1 :(得分:0)

我猜你在MainPage构造函数中有太多密集的代码。无论哪种方式,您都可以使用Task.Run在不同的线程中加载数据和/或使用MainPage.Loaded事件并在此处执行操作。

还尝试限制App.xaml.cs中的代码(构造函数,启动方法)

使用Dispatcher.BeginAction时,不要忘记使用Task.Run来操纵UI。

还有Scheduler.Dispatcher.Schedule()来调用延迟方法。