Windows Phone Listbox虚拟化的问题
最近在项目里面碰到最头疼的一个难题就是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虚拟化的问题的更多相关文章
- windows phone listbox虚拟化(下)
之前写过一篇关于listbox虚拟化的文章,那里采用的方法都是自己早期研究的一些思路,然后发现当数据很大的时候,其实性能效果还是不太理想,下面让我们来仔细想一想到底是基于什么原因,我们回去破坏默认的虚 ...
- Windows phone UI虚拟化和数据虚拟化(二)
书接上回的Windows phone UI虚拟化和数据虚拟化(一)我们学习了wp的ui虚拟化.今天来和大家分享一下wp的数据虚拟化. 并同时感谢我的同事dgwutao在编写此文时给我的巨大帮助,3ks ...
- Windows phone UI虚拟化和数据虚拟化(一)
今天和大家分享一些关于windows phone ui虚拟化和数据虚拟化的一些知识. 也顺便回答我上一篇[LongListSelector 控件 在 wp7 和wp8中的不同之处]里,留下的那个问题, ...
- Windows Server 2012 虚拟化实战:网络(二)
关于Windows Server的虚拟化网络,前文描述了在操作系统层面上的出现的配置变化.其中的一些配置通过Windows Server提供的小工具即可实现,如网卡组的配置,而有些需要安装Window ...
- Windows Server 2012 虚拟化实战:存储(二)
五.搭建Window Server 2012虚拟化的存储网络 前文我们讨论了Window Server 2012支持的各种与存储相关的技术,接下来我们通过实践对其中的一些技术进行检验.实际上Windo ...
- Windows Server 2012 虚拟化实战:存储(一)
在计算机世界我们随处可以见的一种方法,那就是抽象.1946年冯诺依曼提出了计算机的基本结构包含:计算器,存储器和I/O设备.这可能是对计算机这一新生事物最重要的一次抽象,它直接影响了今后几十年计算机软 ...
- Windows Server 2012 虚拟化实战:SCVMM的安装和部署
本篇大概介绍一下在Windows Server 2012 R2上安装和部署SCVMM的过程及其注意事项.下图是我们数据中心SCVMM的基本架构,其中 SCVMM Database 是用于存储了所有配置 ...
- Windows Server 2012 虚拟化实战:网络(一)
虚拟化对于计算的抽象,大家可能相对熟悉,也许都有在单机使用诸如Virtual PC或者Virtual Box的经验.使用的这些虚拟化软件的第一印象就是我们的CPU可以同时运行多套不同的操作系统,并且其 ...
- Windows Server 2012 虚拟化实战:域
在Windows Server系统中,一些服务必需要构建在域的环境中,这不仅是为了统一验证和资源共享,同时也是为了网络安全.为构建虚拟化测试,我们需要先搭建域环境.之前先来大概了解一下域. 在使用工作 ...
随机推荐
- centos7安装tftp服务器
1.安装 su #进入root yum install xinetd yum install tftp yum install tftp-server 2.配置tftp vim /etc/xinetd ...
- AD转换精度的计算
声明原文来源于:http://wenku.baidu.com/view/1e6d8f3083c4bb4cf7ecd1c2.html 讨论AD转换分辨率的算法(zt) (1)在总长度为5米的范围里,平均 ...
- MSP430F149学习之路——时钟1
1.看门狗产生方波 #include <msp430x14x.h> void main() { WDTCTL = WDT_MDLY_32; IE1 |= WDTIE; P1DIR |= B ...
- python时间相关
1.格式化时间time.strftime,返回字符串 import time time.strftime('%Y-%m-%d %H:%M:%S') 2.时间差 timedelta from datet ...
- 学习练习 java 不重复的三位偶数
编写一个Java程序,计算一下1,2,…,9这9个数字可以组成多少个互不相同的.无重复数字的三位偶数. package com.hanqi; //编写一个Java程序,计算一下1,2,…,9 //这9 ...
- Android IOS WebRTC 音视频开发总结(四九)-- ffmpeg介绍
本文主要介绍ffmpeg,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,个人微信公众号blacker,更多详见www.rtc.help 说明: ps1:如果直接从webrtc开始学 ...
- jQuery中ajax调用当前页面方法
$.ajax({ type: 'POST', url: 'AddressManager.aspx/GetProvince',//AddressManager.aspx当前页面 data: '{cach ...
- jQuery身份证验证插件
jQuery身份证验证插件 /*! * jQuery isIDCard Plugin v1.0.0 * http://www.cnblogs.com/cssfirefly/p/5629561.html ...
- Head First-策略模式
策略模式,什么是策略模式,定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户. 下面我们就用鸭子来诠释一下策略模式,鸭子有两种行为呱呱叫和飞,但是并不是所有的鸭 ...
- Lua 多维表的遍历中的赋值
说到Lua的遍历将要使用到循环:先说遍历再说循环: 遇到这样类似结构的一个table Data={ []={p1=,pa={,,}}, []={p1=,pa={,,}}, []={p1=,pa={,, ...