Windows Phone理解和运用ItemTemplate、ContentTemplate和DataTemplate

 

 

2.2.5 ItemTemplate、ContentTemplate和DataTemplate
在理解ItemTemplate、ContentTemplate和DataTemplate的关系的之前,我们先来看看ContentControl类和ItemsControl类。ContentControl类是内容控件的基类,如Button, CheckBox,最明显的特征就是这个控件有Content属性,有Content属性的系统控件都是ContentControl的子类。ItemsControl类是列表内容控件的基类,如ListBox,它和ContentControl类是类似的,只不过ContentControl类是单项的内容,ItemsControl是多项的内容。
那么所有继承自ContentControl的内容控件的ContentTemplate属性和所有继承自ItemsControl的列表控件的ItemTemplate属性,都是DataTemplate类型的,意思就是我们可以通过DataTemplate来定义ContentControl和ItemsControl的控件的UI效果和数据的显示。
2.2.6 数据模板的使用
DataTemplate是一种可视化的数据模板,它强大的作用在于可以把数据通过绑定的方式展现到控件上。在上面的例子中,我们介绍了用DataTemplate去实现了UI控件的内容的显示,那么其实DataTemplate最主要的作用并不是去取代ControlTemplate的样式定义,而是通过数据绑定把数据的控件的数据源的信息展现到控件上。
下面我们还是通过一个Button的控件来看一下DataTemplate的数据绑定是如何发挥作用的。
代码清单2-5:数据模板(源代码:第2章Examples_2_5)
(1)首先定义一个Person类表示是数据实体的类型,代码如下:
    public class Person    {        public string LastName { get; set; }        public string FirstName { get; set; }    }

(2)设计一个DataTemplate,并把这个DataTemplate作为一个资源来使用,这是和Style资源是一样的道理,DataTemplate也可以作为公共的资源给多个控件去使用。那么这个模板的内容是使用StackPanel控件把Person对象的信息水平排列起来。
<ignore_js_op>copycode.gif 
    < Page.Resources>                                                                                            


(3)创建一个Button控件,把ContentTemplate属性和模板资源关联起来。
     

(4)创建一个Person对象并且赋值给Button控件的Content属性。
singlePersonButton.Content = new Person { FirstName = "lee", LastName = "Terry" };
最后我们可以看到按钮的运行效果如图2.14所示,DataTemplate可以把数据对象绑定起来来实现更加灵活的通用的强大的UI数据显示效果。
<ignore_js_op>021400291149097.png
图2.14 数据模板绑定的按钮
那么刚才的示例是DataTemplate在ContentControl类型的控件上的应用,那么下面我们再来看看DataTemplate在ItemsControl类型的控件上的实现,ContentControl和ItemsControl也是可以直接作为控件去使用的,如果我们并不需要Button或者ListBox这些控件的一些高级功能,就可以直接使用ContentControl或者ItemsControl控件。
(1)定义一个ItemsControl控件,把ItemTemplate属性和模板资源关联起来。

(2)创建一个Person对象的集合并且赋值给ItemsControl控件的ItemsSource属性。
Persons.Add(new Person { FirstName = "lee2", LastName =     "Terry2" });   
Persons.Add(new Person { FirstName = "lee3", LastName =     "Terry3" });
Persons.Add(new Person { FirstName = "lee4", LastName =     "Terry4" });  
Persons.Add(new Person { FirstName = "lee5", LastName =     "Terry5" });
itemsControl.ItemsSource = Persons;
这时候可以看到运行效果如图2.15所示,ItemsControl可以把数据集合通过列表的形式展现出来,但是你会发现直接用ItemsControl实现的列表的功能非常有限,并且也不能滚动,接下来再结合一下ContentTemplate来进行完善这个列表的控件。
<ignore_js_op>021402018173642.png
2014-6-8 10:49 上传
下载附件 (11.22 KB)
图2.15 数据模板绑定的列表
(3)定义一个ItemsControl的样式,其实就是自定义一个ControlTemplate的模板作为ItemsControl控件的模板来使用,那么这个模板就是一个内容的展现形式的模板。我们在ControlTemplate模板上定义了一个ScrollViewer控件然后里面再使用了一个StackPanel控件,最里面的是ItemsPresenter控件。列表的DataTemplate的显示内容就是直接投影在ItemsPresenter控件上面的。我们对ScrollViewer控件和StackPanel控件都设置了不同的边框颜色,这样在运行的时候就可以很明显地看出来控件之间的关系是怎样的。

   


(4)在ItemsControl上添加Style属性为上面定义的样式。
 

程序的运行效果如图2.16所示。
<ignore_js_op>021403313649218.png

详细说明:http://wp.662p.com/thread-8220-1-1.html

转载于:https://www.cnblogs.com/wangniuzen/p/4104922.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杂七杂八的杂记

引子&#xff1a;这里是零零星星的没有系统总结的东西&#xff0c;或者是有待继续了解之前一些零散的备忘。 高手达人慎入&#xff0c;以免贻笑大方&#xff0c;如果误入进来&#xff0c;敬请指导一二。 1、今天发现一个Vc 中一个很好的东西&#xff1a;vector。需要#include…

C#和C++结构体Socket通信

From: http://hi.baidu.com/yangliangwang/blog/item/1a0116138ff098d6f6039ea9.html 最近在用C#做一个项目的时候&#xff0c;Socket发送消息的时候遇到了服务端需要接收C结构体的二进制数据流&#xff0c;这个时候就需要用C#仿照C的结构体做出一个结构来&#xff0c;然后将其…

用 vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)

路由跳转前做一些验证&#xff0c;比如登录验证&#xff08;未登录去登录页&#xff09;&#xff0c;是网站中的普遍需求。对此&#xff0c;vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫&#xff08;navigation-guards&#xff09;。 导航守卫&#xff08;navig…

统计代码行数

使用终端&#xff0c;cd到项目下 find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.h" -or -name "*.rss" ")" -print | xargs wc -l 转载于:https://www.cnblogs.com/mo-shou…

基本原理

零序电流保护的基本原理是基于基尔霍夫电流定律&#xff1a;流入电路中任一节点的复电流的代数和等于零&#xff0c;即ΣI0&#xff0c;它是用零序C.T作为取样元件。在线路与电气设备正常的情况下&#xff0c;各相电流的矢量和等于零&#xff08;对零序电流保护假定不考虑不平衡…

GPS数据格式

本菜鸟人&#xff1a;专业导航&#xff0c;善于寻北&#xff0c;精通惯导&#xff0c;兼职GPS&#xff0c;然近日因课题之需&#xff0c;方究机器之视觉也&#xff0c;乃叹人生之无常兮&#xff01;惯导今天不讲&#xff0c;讲的话可以说上6天7夜&#xff08;貌似被拍成电影了&…

C# 的内存拷贝

From: http://www.cnblogs.com/Yjianyong/archive/2010/08/05/1792976.html 近段时间在C#是直接调用动态库比较多&#xff0c;由于有时又需要使用ActiveX控件&#xff0c;往往出现很多的同名的不同命名空间的类&#xff0c;结构等&#xff0c;对不同实体之类的转换是很烦的一件…

也谈如何构建高性能服务端程序

引子&#xff1a;我接触过很多编程语言&#xff0c;接触过各种各样的服务器端开发&#xff0c;Java&#xff0c;Go&#xff0c;Ruby&#xff0c;Javascript等语言&#xff0c;Spring&#xff0c;Node.js&#xff0c;Rails等等常见服务器端框架和编程模型都有接触。这里谈一下我…

Mint-Ui的mt-search点击选中

<template><div class"page-search"><mt-search autofocus v-model"value" placeholder"搜索"> </mt-search><mt-cellv-for"item of filterResult":key"item":title"item"click.nativ…

毕业了!

忆往昔 论文犹如一座大山 日夜码字不知疲倦 写了半天改个没完 良辰美景于我何干 俱往矣 神马检索与期刊 能有几篇是真言 而今迈步从头越 翻过大山尽开颜

网络信息系统(NIS服务器)

分为两部分&#xff1a;一、服务器端配置&#xff1a;1&#xff0e;#检查包是否安装[rootVMLINUX2 shell3]# rpm -qa | grep ypserv ypserv-2.19-32&#xff0e;安装包文件 serv-2.19-3.i386.rpm[rootVMLINUX2 Server]# rpm -ivh ypserv-2.19-3.i386.rpm warning: ypse…

使用C#格式化字符串

From: http://hi.baidu.com/anxing_space/blog/item/6b31186dd6d1d7f942169468.html 今天在博客园上看到一片超赞的C#字符串格式的文章&#xff0c;是我看过最好的一个关于字符格式的文章&#xff0c;转来收藏&#xff0c;顺便向原作者flyingbread表示感谢和尊敬&#xff01; 1…

Tomcat提示Null component

Tomcat提示“严重: Null component Catalina:typeJspMonitor,namejsp,WebModule//localhost/,J2EEApplicationnone,J2EEServernone”错误&#xff0c; 然后无法启动&#xff0c; 这是因为 Tomcat 使用的 jre 版本比应用程序编译的 jre 版本低造成的。 需要把 Tomcat 使用的 jre…

vue如何返回上一页效果

如何通过点击的方式控制当前页返回到上一个路由页面&#xff1a; 1.在当前页面添加返回按钮 <div style"text-align: center"><el-button v-on:click"backHistory">取消</el-button> </div>2.在方法体内写back方法实现点击返回上…

理解 clip

参考 http://developer.51cto.com/art/201009/223326.htm http://vsfor.blog.51cto.com/4165449/1179853 http://www.zhangxinxu.com/wordpress/2011/04/css-cliprect%E7%9F%A9%E5%BD%A2%E5%89%AA%E8%A3%81%E5%8A%9F%E8%83%BD%E5%8F%8A%E4%B8%80%E4%BA%9B%E5%BA%94%E7%94%A8%E4…