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> 
    < Page.Resources>

(3)创建一个Button控件,把ContentTemplate属性和模板资源关联起来。
(4)创建一个Person对象并且赋值给Button控件的Content属性。
singlePersonButton.Content = new Person { FirstName = "lee", LastName = "Terry" };
最后我们可以看到按钮的运行效果如图2.14所示,DataTemplate可以把数据对象绑定起来来实现更加灵活的通用的强大的UI数据显示效果。
<ignore_js_op>
图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>

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>

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

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

Windows Phone理解和运用ItemTemplate、ContentTemplate和DataTemplate相关推荐

  1. Windows API 理解----Nt* Zw*

    在你要理解Zw和Nt 系列API时,你首先要知道一点,那就是系统调用.什么是系统调用呢? 系统调用:操作系统为应用程序提供的可被调用的一组函数,也叫"System Call". 从 ...

  2. Windows SID理解

    Windows安全性要依赖于几个基本元素.:访问令牌.SID.安全描述符.访问控制列表.密码. 访问令牌:访问令牌在本质上定义了两 上"P":Permissions(权限)和Pri ...

  3. 纯C++创建Windows窗体(理解WinMain()与WndProc())

    一直比较关注本质的东西.VC封装了很多,想了解一下比较麻烦. 先从了解WinMain()入口函数与WndProc()消息处理函数开始吧. 大气象 #include <windows.h> ...

  4. Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 阅读理解

    原文地址:https://arxiv.org/pdf/2103.14030.pdf 收录:CVPR 2021 Best paper 代码: https://github.com/microsoft/S ...

  5. linux运行cmd文件sh文件目录,在Windows上,如何执行.sh文件?

    问题描述 当我尝试通过命令./name.sh在命令行中执行文件(name.sh)时,我收到错误消息: "." is not recognized as an internal or ...

  6. 《游戏编程入门 4th》笔记(2 / 14):监听Windows消息

    文章目录 编写一个Windows程序 理解InitInstance InitInstance函数调用 InitInstance的结构 理解MyRegisterClass MyRegisterClass ...

  7. Windows phone 7 之ToggleSwitch

    toggleSwitch控件为Silverlight for Windows Phone Toolkit 控件包中的开关控件. 其Xaml代码为: View Code 1 <Grid x:Nam ...

  8. 告诉你Windows PE 是什么东东?详细介绍一下winpe

    针对菜菜朋友可以对PE这样理解: 大家是不是都用过xp系统?(一个独立的操作系统) xp系统是由好多好多的文件构成的:.exe .txt .dll ~~~ 那么大家一定也知道精简型的XP(没用过也不会 ...

  9. 使您成为Windows专家的一些学习习惯

    Known How and Known Why 知其然,更知其所以然 不同的层次: 知道如何使用 知道工作机制 理解为什么要这样设计 钻研精神,keep ask question 毅力 ======= ...

最新文章

  1. [数字图像处理]图像去噪初步(2)--非线性滤波器
  2. 机器学习笔记:(时间序列中的线性回归)如何选择预测变量
  3. Eclipse+pydev+手动安装
  4. 某大学多站联动获取webshell
  5. MYSQL快速导入大量数据
  6. python数据变更邮件提醒_如何使python脚本在某些数据更改时自动发送电子邮件?...
  7. iOS开发之UIControlEventEditingChanged失效
  8. wingdings字体符号在哪_出版社编辑对标点符号和专业术语的要求
  9. Hadoop 源代码分析(二三)FSDirectory
  10. 对因果报应和轮回的态度
  11. Atitit arch design context软件架构设计的内容 目录 1. 考虑到架构设计原则 1 1.1. 开发效率 稳定性 可靠些等 性能 1 1.2. 简单原则则 1 1.3. 配置
  12. NOIP2017提高组Day2T1(奶酪)题解
  13. 人工神经网络(六)线性回归与分类, 解决与区别
  14. 程序员夏天穿格子衫,那么冬天穿什么?
  15. 2022年金砖国家职业技能大赛(决赛)网络空间安全赛项 | 浙江赛区选拔赛 任务书
  16. 【量化投资】03.量化工程abu学习之量化基础(1/3)
  17. printf(%d%d%d%d\n, a,b,c);
  18. 迈阿密大学计算机科学排名,迈阿密大学各大专业排名情况如何呢?
  19. 区块链学习:区块链分类
  20. 系统栈与用户栈 以及 栈的内部实现

热门文章

  1. MacBook Air连接2K屏开启HiDPI
  2. AcWing 算法基础课第三节基础算法3 双指针、位运算、离散化、区间合并
  3. 计算机科学与技术图像处理,《计算机科学与技术:数字图像处理》李俊山、李旭辉 编_孔网...
  4. 深度探索as3的事件机制
  5. Google Picasa
  6. 【架构实践】架构解耦 Decoupling Architecture
  7. vscode搜索正则匹配
  8. 新手还在为货源发愁吗?萌啦选对平台货源无忧!
  9. 番茄助手(Visual Assist X)过期——解决方法
  10. 贪吃蛇大作战类游戏的实现