最近在项目里面碰到最头疼的一个难题就是Listbox虚拟化的问题,查阅很多文档其实Listbox本身是支持虚拟化的,那么在什么情况下会破坏Listbox的虚拟化呢?目前我接触到的主要有两个原因:一.是需要在Listbox的ItemTemplate模板里面承载更多的显示内容,因此我们将不再使用默认显示模板(VirtualizingStackPanel),比如我们需要在Listbox每一项里面包含一张图片同时下面显示一行说明文字,遇到这种情况,我们可能会这样去定义Listbox的模板项:

由于StackPanel容器控件本身是不支持虚拟化的,因此这就会间接地破坏Listbox的虚拟化。还有一种就是有的时候我们需要实现下拉刷新的效果,由于Listbox本身是没有提供那种刷新的效果的,所以我们往往会根据Listbox里面拉动的距离来计算是否拉动到底部或者顶部,因此我们需要重写一个继承自Listbox的用户自定控件,但是当我们运用用户自定义控件的时候,我们测试发现这种情况下也已经破坏了Listbox的虚拟化,那么是为什么呢?按道理我们的自定义控件是从Listbox集成而来,可是为什么却没有Listbox默认的虚拟化效果呢?本人自己推测如下,因为有的时候我们去实现VirtualizingStackPanel模板属性,即使有的时候会想到去实现,但是实现的方式可能又跟系统提供的有出入(这块不太严谨,本人没有自测)。

那么有没有什么好的办法可以避免以上原因所带来的Listbox虚拟化破坏呢?在网上找了好久,发现好多人都采用LongListSelector控件去代替Listbox控件,没错LongListSelector默认情况下也是支持虚拟化的,并且即使改变它的内部默认模板,它的虚拟化也是不会被破坏的,但是在实际的运用当中本人还遇到一个比较头疼的问题,就是:LongListSelector要显示的内容是从Web上面下载而来的时候,我们会遇到一个异常:

Layout cycle detected. Layout could not complete.

这到底是什么原因引起的呢?大体意思是:界面检测的时候,没有完成。可是为什么重新检测界面呢?网上找了一些资料发现:原来进行Web请求的时候,会有一定的时间延迟。在数据返回到客户端得到处理之前,LongListSelector里面的Image控件已经得到初始化了,当真正的网络回来之后,客户端需要重新去处理数据,这个时候得到的真正的数据(例如图片),他们的大小可能是不相同,LongListSelector要展示他们就需要重新给计算控件大小,分配合适的空间大小,这个时候就会一起上面我们说到的异常。那么有没有什么好的办法去处理这种异常呢?网上好多人的处理方法是:固定Image空间的大小,给它设置固定的Height和Width,但是本人试了一下,貌似还是不可以的。针对这块本人还没有找到什么好的解决方案,如果读者有什么高见的话,欢迎与我联系。

Windows Phone Listbox虚拟化的问题的更多相关文章

  1. windows phone listbox虚拟化(下)

    之前写过一篇关于listbox虚拟化的文章,那里采用的方法都是自己早期研究的一些思路,然后发现当数据很大的时候,其实性能效果还是不太理想,下面让我们来仔细想一想到底是基于什么原因,我们回去破坏默认的虚 ...

  2. Windows phone UI虚拟化和数据虚拟化(二)

    书接上回的Windows phone UI虚拟化和数据虚拟化(一)我们学习了wp的ui虚拟化.今天来和大家分享一下wp的数据虚拟化. 并同时感谢我的同事dgwutao在编写此文时给我的巨大帮助,3ks ...

  3. Windows phone UI虚拟化和数据虚拟化(一)

    今天和大家分享一些关于windows phone ui虚拟化和数据虚拟化的一些知识. 也顺便回答我上一篇[LongListSelector 控件 在 wp7 和wp8中的不同之处]里,留下的那个问题, ...

  4. Windows Server 2012 虚拟化实战:网络(二)

    关于Windows Server的虚拟化网络,前文描述了在操作系统层面上的出现的配置变化.其中的一些配置通过Windows Server提供的小工具即可实现,如网卡组的配置,而有些需要安装Window ...

  5. Windows Server 2012 虚拟化实战:存储(二)

    五.搭建Window Server 2012虚拟化的存储网络 前文我们讨论了Window Server 2012支持的各种与存储相关的技术,接下来我们通过实践对其中的一些技术进行检验.实际上Windo ...

  6. Windows Server 2012 虚拟化实战:存储(一)

    在计算机世界我们随处可以见的一种方法,那就是抽象.1946年冯诺依曼提出了计算机的基本结构包含:计算器,存储器和I/O设备.这可能是对计算机这一新生事物最重要的一次抽象,它直接影响了今后几十年计算机软 ...

  7. Windows Server 2012 虚拟化实战:SCVMM的安装和部署

    本篇大概介绍一下在Windows Server 2012 R2上安装和部署SCVMM的过程及其注意事项.下图是我们数据中心SCVMM的基本架构,其中 SCVMM Database 是用于存储了所有配置 ...

  8. Windows Server 2012 虚拟化实战:网络(一)

    虚拟化对于计算的抽象,大家可能相对熟悉,也许都有在单机使用诸如Virtual PC或者Virtual Box的经验.使用的这些虚拟化软件的第一印象就是我们的CPU可以同时运行多套不同的操作系统,并且其 ...

  9. Windows Server 2012 虚拟化实战:域

    在Windows Server系统中,一些服务必需要构建在域的环境中,这不仅是为了统一验证和资源共享,同时也是为了网络安全.为构建虚拟化测试,我们需要先搭建域环境.之前先来大概了解一下域. 在使用工作 ...

随机推荐

  1. win7下Oracle 11的安装

    把下载的win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压到一个database文件夹下,运行安装文件   Oracle11的卸 ...

  2. oracle 索引失效原因

    转自  http://www.cnblogs.com/orientsun/archive/2012/07/05/2577351.html Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时 ...

  3. Eclipse中Jsp页面警告的解决方法小结

    恩,只要是开发人员,这样的小事情总会遇到的,对于这其中的某些警告性的错误是不影响代码的运行的,对应的功能也是能实现的,不过总给人一种不太好看的感觉!如果代码写的比较符合规范,这些问题也就自然而然的消失 ...

  4. 学习总结 java Iterator迭代器练习

    package com.hanqi.jh; import java.util.*; public class Text3 { public static void main(String[] args ...

  5. 华为OJ平台——查找组成一个偶数最接近的两个素数

    import java.util.Scanner; /** * 问题描述:任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况, * 本题目要求输出组成指定偶数的两个素数差值最小 ...

  6. JavaScript之数组循环 forEach 循环输出数组元素

    var arrayAll = []; arrayAll.push(1); arrayAll.push(2); arrayAll[arrayAll.length] = 3; arrayAll[array ...

  7. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  8. C语言文法 改

    <程序> ->  <外部声明> |  <程序>  <外部声明> <外部声明>  ->   <函数定义>  |  &l ...

  9. [原]hdu2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (这个只是题目名字) (多重背包)

    本文出自:http://blog.csdn.net/svitter 原题:http://acm.hdu.edu.cn/showproblem.php?pid=2191 题意:多重背包问题.转换成为01 ...

  10. centos下网络的基本配置方法讲解

    上一篇中我们已经成功安装了我们的centos系统,但是我们可能发现我们安装的centos上不了网,所以这一章我们来说说如何配置centos来连接外网和局域网. 我们首先来认识一下linux下部分网络配 ...