Windows Phone 8.1 列表控件(3):多数据呈现
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView。
而这两个控件实在太多东西可讲了,于是分成三篇来讲:
(3)多数据呈现
ListView 和 GridView 的最大差别就是:ListView 是一条条依序排列的,而 GridView 则是一块块依序排列的,因此 ListView 中的一项就会占据整整一行或者一列,而 GridView 的一项只会占据它应有的大小,一行或一列中可以放置多项。
而两者在其它方面上基本一致,因此下文只对 ListView 进行介绍,GridView 其实也一样的。
多数据呈现,也就是说大量的数据要在 ListView 中呈现时,加载必定会较慢,那要如何让用户体验更好呢?
(1)添加 ListView 的 ContainerContentChanging 事件
如字面意思所示,也就是当 ListView 的内容(也就是Item)发生改变时会触发的事件:
<ListView ContainerContentChanging="IncrementalUpdateHandler"/>
(2)确定 Item 内容的呈现顺序
比如 Item 的结构为:
Grid
|__Border name=templatePlaceholder
|__Image name=templateImage
|__Grid
|__TextBlock name=templateTitle
|__TextBlock name=templateSubTitle
一般的做法都是先让占位符(templatePlaceholder)呈现,然后根据每项内容的重要程度和加载难度依次排序呈现。
假设这个 Item 的呈现顺序为:Placeholder -> Title -> Image, SubTitle。
(3)处理 ListView 的 ContainerContentChanging 事件
private void IncrementalUpdateHandler(ListViewBase sender, ContainerContentChangingEventArgs args)
{
args.Handled = true; if( args.Phase != )
throw new Exception("something went terribly wrong");
else
{
Grid templateRoot = (Grid)args.ItemContainer.ContentTemplateRoot;
Border placeholder = (Border)templateRoot.FindName("templatePlaceholder");
Image itemImage = (Image)templateRoot.FindName("templateImage");
TextBlock title = (TextBlock)templateRoot.FindName("templateTitle");
TextBlock subtitle = (TextBlock)templateRoot.FindName("templateSubTitle"); placeholder.Opacity = ; itemImage.Opacity = ;
title.Opacity = ;
subtitle.Opacity = ; args.RegisterUpdateCallback(ShowText);
}
}
首先将 args.Handled 设为 true 以及检查 args.Phase 是否不为 0。
然后根据控件名称找到各控件,并根据需要设置每个控件的 Opacity,隐藏或显示它们。(注意,不能调整 Visible 属性,因为这会再次触发 ContainerContentChanging 事件)
最后调用 args.RegisterUpdateCallback(MethodName),显示下一个要呈现的控件内容。
private void ShowText(ListViewBase sender, ContainerContentChangingEventArgs args)
{
args.Handled = true; if( args.Phase != )
throw new Exception("something went terribly wrong");
else
{
SampleItem sItem = (SampleItem)args.Item; Grid templateRoot = (Grid)args.ItemContainer.ContentTemplateRoot;
TextBlock title = (TextBlock)templateRoot.FindName("templateTitle"); title.Text = sItem.Title;
title.Opacity = ;
args.RegisterUpdateCallback(ShowImage);
}
}
ShowText
private void ShowImage(ListViewBase sender, ContainerContentChangingEventArgs args)
{
args.Handled = true; if( args.Phase != )
throw new Exception("something went terribly wrong");
else
{
SampleItem sItem = (SampleItem)args.Item; Grid templateRoot = (Grid)args.ItemContainer.ContentTemplateRoot;
Image itemImage = (Image)templateRoot.FindName("templateImage");
TextBlock subtitle = (TextBlock)templateRoot.FindName("templateSubTitle");
Border placeholder = (Border)templateRoot.FindName("templatePlaceholder"); itemImage.Source = new BitmapImage(new Uri(sItem.ItemImage));
subtitle.Text = sItem.TargetGroup; itemImage.Opacity = ;
subtitle.Opacity = ; placeholder.Opacity = ;
}
}
ShowImage
其实也就是根据第二步中确定的内容呈现顺序依次调用 RegisterUpdateCallback。
Windows Phone 8.1 列表控件(3):多数据呈现的更多相关文章
- Windows Phone 8.1 列表控件(1):基本
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...
- Windows Phone 8.1 列表控件(2):分组数据
说到 List 控件,Windows Phone 8.1 上推荐使用的是 ListView 和 GridView. 而这两个控件实在太多东西可讲了,于是分成三篇来讲: (1)基本 (2)分组数据 (3 ...
- 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架
<深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...
- 重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView
原文:重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView [源码下载] 重新想象 Windows 8 Store Apps (11) - ...
- 重新想象 Windows 8 Store Apps (8) - 控件之 WebView
原文:重新想象 Windows 8 Store Apps (8) - 控件之 WebView [源码下载] 重新想象 Windows 8 Store Apps (8) - 控件之 WebView 作者 ...
- 重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresenter
原文:重新想象 Windows 8 Store Apps (5) - 控件之集合控件: ComboBox, ListBox, FlipView, ItemsControl, ItemsPresente ...
- WPF: 实现带全选复选框的列表控件
本文将说明如何创建一个带全选复选框的列表控件.其效果如下图: 这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都 ...
- CListCtrlEx:一个支持文件拖放和实时监视的列表控件——用未公开API函数实现Shell实时监视
一.需求无论何时,当你在Explorer窗口中创建.删除或重命名一个文件夹/文件,或者插入拔除移动存储器时,Windows总是能非常快速地更新它所有的视图.有时候我们的程序中也需要这样的功能,以便当用 ...
- Windows常见窗口样式和控件风格
Windows常见窗口样式和控件风格 王佰营 徐丽红 一.窗口样式 WS_POPUP 弹出式窗口(不能与WS_CHILDWINDOW样式同时使用)WS_CHILDWINDOW 子窗口(不能与WS_PO ...
随机推荐
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...
- FZU 2169 shadow (用了一次邻接表存边,树形DP)
Accept: 28 Submit: 97 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description YL是shadow国的国 ...
- Android多媒体应用开发-控制摄像头拍照
现在的手机的功能可谓是五花八门,手机照相功能就是特别突出的一点,现在的手机照相机甚至成了专业数码照相机,可以拍摄出清晰的照片和录制高分辨率的视频.Android操作系统呢,提供了相应的功能来控制拍照: ...
- PhpStorm, XDebug, and DBGp Proxy
phpstorm 利用 xdebug.dbgp-proxy配置远程调试 1.单客户机远程调试 a.安装xdebug库文件(windows:php_xdebug.dll;linux:php_xdebug ...
- java_有返回值线程_提前加载例子
package com.demo.test3; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionE ...
- App安全之网络传输安全
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...
- Subsequence
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...
- javascript 关于语义化作用的理解
看代码实例1 var a=1; function m(a){ //此处为形参第一个传入函数的参数,既为arguments[0] alert(a); //此处a为与形参绑定的 } m(a);//1 此时 ...
- .net 在不同情况下调用带soapheader的webservice的方式
国庆长假到了,本想出去玩玩,无奈自己屌丝一枚,啥都没有,只能自己宅在家里思考思考人生.不过人生还是过于复杂,一时间也想不出个所以然,只能是整理一下在工作中遇到的一些小问题,首先是关于带soaphead ...
- 第二节:Maven的运行机制
Maven 的运行机制分为两个分别是生命周期和插件 首先我们来说说Maven的生命周期 1.1:生命周期是个个阶段组成的 1.2:Maven的生命周期是相互独立的,他们之间没有交集 1.3:阶段是有顺 ...