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,一经查实,立即删除!

相关文章

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…

毕业了!

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

vue如何返回上一页效果

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

机器学习算法基础概念学习总结

转自&#xff1a;http://blog.csdn.net/lantian0802/article/details/38333479 1.基础概念&#xff1a; (1) 10折交叉验证&#xff1a;英文名是10-fold cross-validation&#xff0c;用来测试算法的准确性。是常用的测试方法。将数据集分成10份。轮流将其中的9份作为训练数据&a…

寻路大数据:海量数据与大规模分析

寻路大数据&#xff1a;海量数据与大规模分析&#xff08;Google大数据专家力作超豪华译者|作序者真正梳理趋势与生态|方案与工具选型|应用场景与价值挖掘的独家内参&#xff09; 【美】Michael Manoochehri&#xff08;迈克尔.马诺切里&#xff09;著 戴志伟等 译 ISBN 978…

AJAX中的请求方式以及同步异步的区别

请求方式&#xff0c;分为GET与POST&#xff1a;GET最为常见的HTTP请求&#xff0c;普通上网浏览页面就是GET。GET方式的参数请求直接跟在URL后&#xff0c;以问号开始。&#xff08;JS中用window.location.search获得&#xff09;。参数可以用encodeURIComponent进行编码&…

js获取当前时间(昨天、今天、明天)

js获取当前时间(昨天、今天、明天) //昨天的时间var day1 new Date();day1.setTime(day1.getTime() - 24 * 60 * 60 * 1000);var s1 day1.getFullYear() "-" (day1.getMonth() 1) "-" day1.getDate();console.log(day1, s1); //今天的时间var day2 …

献给网页开发者的20款Firefox插件

毫无疑问&#xff0c;比起其他浏览器&#xff0c;Chrome虽有着明显的优势&#xff0c;但是它的劲敌Firefox却是很多前端攻城师和研发人员的挚爱&#xff0c;为了尽可能地提高用户体验&#xff0c;Firefox的社区在插件开发和运用上有着丰富的经验&#xff0c;说它是网站开发者的…

VC6重载字体对话框,去除颜色下拉框

为了去除字体对话框中的颜色下拉框&#xff0c;我们需要重载字体对话框类&#xff1a;CFontDialog 1. 创建一个MFC Class&#xff0c;继承自CFontDialog: // MyFontDialong.h : header file //// CMyFontDialong dialogclass CMyFontDialong : public CFontDialog {DECLARE_DY…

Mac系统下如何使用命令行方式启动MySQL

首先&#xff0c;先去官网下载MySQL&#xff0c;选择Mac版本的DMG格式的文件。 官网地址为&#xff1a;dev.mysql.com/downloads/mysql/5.7.html 然后下载后&#xff0c;直接双击对应的dmg格式的文件进行安装即可。接下来&#xff0c;我们可以先看下如何在系统偏好设置中启动M…

android之隐示意图跳转启动另一个activity

主面板布局&#xff1a;layout/activity_main.xml <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:layout_width"match_parent" android:layout_height"match_parent" android:orientation"…