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>

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

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

    不要在构造函数或Loaded事件中加载/初始化你的数据,因为它们与UI控件绑定在一起。这将冻结UI。
  1. 始终对源进行异步调用,这将允许UI在任务完成时继续。
  2. 使用OnNavigatedTo(缓存数据,如果大量数据通过网络流),并使用异步方法。

我猜你在MainPage构造函数中有太多密集的代码。无论哪种方式,你都可以使用Task.Run在不同的线程中加载数据和/或使用MainPage.Loaded事件在这里做你的事情。

也试着限制你在App.xaml.cs(构造函数,启动方法)中的代码

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

也有Scheduler.Dispatcher.Schedule()调用延迟方法