数据模板,如果你仅仅听到这个名词,你一定很迷惑,什么来的?用来干什么的?不急,亲,今天,我们一起来探索一下吧。
用白话文说,数据模板就是用来规范数据的显示方式的,关于模板,估计各位不陌生的,大家应该玩过PPT吧,都做过演示文稿吧,对啊,PPT里面有很多模板的,明白了吧?不明白?那你一定填过表吧,如果报考什么考试的,你肯定会被要求填一些什么报名表之类的,或者说,找过工用吗?是啊,做简历也有简历模板。模板的用法就像做填空题,有了部分规范的内容,然后你按照这个规范,在特定的位置填上恰当的内容,你总不能说把你的姓名填到“性别”那里去吧,这就不符合规范了。
好了,废话讲了不少,下面进入正题,你想想,哪些控件最有可能用到数据模板?哈,其实很多,只要是ContentControl的子类基本上都可以,如Button等,当然,这些控件一般没那必要,按钮嘛,多数情况下显示一些文本提示用户用来干什么的就可以了,顶多你放个图标在按钮上,估计也很少人把一段视频放在按钮上吧,呵呵,其实,在WP里面,这是可以的,但没有必要。
对的,一般列表形式的控件就最有可能使用到数据模板了,比如ListBox控件,如果你的列表控件只是让用户看信息的,而不需要额外操作,你完全可以考虑使用ListBox的“老爸”——ItemsControl。

好,下面我们用一个例子看看在不自定义数据模板的情况下,ItemsControl的列表项是如何显示的。
首先,当然是新建一个项目了,不用我介绍,相信各位都会。
你完全可以这样,把页面内的Grid根容器都删除,直接扔一个ItemsControl上面,就像这样。

[html] view plaincopyprint?
  1. <phone:PhoneApplicationPage
  2. x:Class="DataTemplateSample.pageA"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  6. xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  7. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  9. FontFamily="{StaticResource PhoneFontFamilyNormal}"
  10. .......
  11. >
  12. <ItemsControl x:Name="myItemControl"/>
  13. </phone:PhoneApplicationPage>

然后,切换到代码页,把myItemControl的数据源设置为一个字符串数组。

[csharp] view plaincopyprint?
  1. public pageA()
  2. {
  3. InitializeComponent();
  4. this.myItemControl.ItemsSource = new string[] {
  5. "玉米炒蛋",
  6. "烧鸭饭",
  7. "青瓜炒肉",
  8. "水煮豆腐",
  9. "糯米鸡"
  10. };
  11. }

好的,不要流口水啊,现在,你可以运行你的超级项目了。
你应该发现了,列表的每一项都是以文本的方式显示,其实,它内部默认就是一个TextBlock,就是用来显示文本的。
那么,如果我设置的数据源不是字符会怎么样呢?
好现在看第二个例子。
先做好布局,和刚才的例子一样。

[html] view plaincopyprint?
  1. <phone:PhoneApplicationPage
  2. x:Class="DataTemplateSample.pageB"
  3. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5. xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  6. xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  7. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  9. .......
  10. >
  11. <ItemsControl Name="myItemsControl" FontSize="52"/>
  12. </phone:PhoneApplicationPage>

接着我们定义一个商品类,包含三个属性:商品名称,单价,条码。
并把ItemsControl的数据源设置为商品类的集合。

[csharp] view plaincopyprint?
  1. public partial class pageB : PhoneApplicationPage
  2. {
  3. public pageB()
  4. {
  5. InitializeComponent();
  6. System.Collections.ObjectModel.ObservableCollection<Goods> goodsList = new System.Collections.ObjectModel.ObservableCollection<Goods>
  7. {
  8. new Goods{GoodsName="纸飞机",Price=0.02f,BarCode ="21001475"},
  9. new Goods{GoodsName="鸡蛋",Price=0.6f,BarCode="21002345"},
  10. new Goods{GoodsName="干面包",Price=2.5f,BarCode="21003087"},
  11. new Goods{GoodsName="地沟油",Price=33.4f,BarCode="21002020"},
  12. new Goods{GoodsName="茅台啤酒",Price=108f,BarCode="21009331"}
  13. };
  14. this.myItemsControl.ItemsSource = goodsList;
  15. }
  16. }
  17. public class Goods
  18. {
  19. /// <summary>
  20. /// 商品价格
  21. /// </summary>
  22. public string GoodsName { get; set; }
  23. /// <summary>
  24. /// 商品单价
  25. /// </summary>
  26. public float Price { get; set; }
  27. /// <summary>
  28. /// 商品条形码
  29. /// </summary>
  30. public string BarCode { get; set; }
  31. }

运行一下,啊,你会大吃一惊,怎么显示这内容?
(图1)

前文说了,数据模板默认是TextBlock控件,只能显示文本,那么,当它遇到非文本数据时,就会尝试调用数据源中类型的ToString方法,所以刚才的示例才会显示出类名,这是从Object类继承过来的ToString方法,现在我们把Goods类改一下,重写它的ToString方法,看看结果是啥。

[csharp] view plaincopyprint?
  1. public override string ToString()
  2. {
  3. return this.GoodsName;
  4. }

这时候你再运行一下,看到商品名称了吧?

然而,你会发现,好像还没有满足我们的需求,我们希望每一项中同时显示商品名,单价,条码值,那怎么办呢?是的,这时候,就真的要自定义数据模板了。

把上面的XAML改一下。

[html] view plaincopyprint?
  1. <ItemsControl Name="myItemsControl" FontSize="52">
  2. <ItemsControl.ItemTemplate>
  3. <DataTemplate>
  4. <Grid Margin="0,0,0,27">
  5. <Grid.ColumnDefinitions>
  6. <ColumnDefinition Width="auto"/>
  7. <ColumnDefinition Width="*"/>
  8. </Grid.ColumnDefinitions>
  9. <Grid.RowDefinitions>
  10. <RowDefinition Height="auto"/>
  11. <RowDefinition Height="auto"/>
  12. <RowDefinition Height="auto"/>
  13. </Grid.RowDefinitions>
  14. <TextBlock Grid.Column="0" Grid.Row="0" Text="商品:"/>
  15. <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding GoodsName}"/>
  16. <TextBlock Grid.Column="0" Grid.Row="1" Text="单价:"/>
  17. <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Price}"/>
  18. <TextBlock Grid.Column="0" Grid.Row="2" Text="条码:"/>
  19. <TextBlock Grid.Column="1" Grid.Row="2" Text="{Binding BarCode}"/>
  20. </Grid>
  21. </DataTemplate>
  22. </ItemsControl.ItemTemplate>
  23. </ItemsControl>

好了,现在就基本达到我们的要求了。
(图2)

转载于:https://www.cnblogs.com/songtzu/archive/2012/07/24/2607158.html

Windows Phone开发(14):数据模板 转:http://blog.csdn.net/tcjiaan/article/details/7350849...相关推荐

  1. Windows Phone开发(28):隔离存储B 转:http://blog.csdn.net/tcjiaan/article/details/7436959...

    上一节我们聊了目录的操作,这一节我们继续来看看如何读写文件. 首先说一下题外话,许多朋友都在摇摆不定,三心二意,其实这样的学习态度是很不好的,如果你对Windows phone开发有兴趣,如果你真想学 ...

  2. Windows Phone开发(16):样式和控件模板 转:http://blog.csdn.net/tcjiaan/article/details/7367260...

    在前面资源一文中也提过样式,样式就如同我们做HTML页排版时常用到的CSS样式表,它是对于特定娄型的可视化元素,应该可以直接说是针对控件的一种可重用的属性设置列表,这样对于需要设置相同属性值的同类型的 ...

  3. Windows Phone开发(7):当好总舵主 转:http://blog.csdn.net/tcjiaan/article/details/7281421...

    吹完了页面有关的话题,今天我们来聊一下页面之间是如何导航的,在更多情况下,我们的应用程序不会只有一个页面的,应该会有N个,就像我们做桌面应 用开发那样,我们一个应用程序中可能不止一个窗体(极简单的程序 ...

  4. Windows Phone开发(46):与Socket有个约会 转:http://blog.csdn.net/tcjiaan/article/details/7669315...

    不知道大家有没有"谈Socket色变"的经历?就像我一位朋友所说的,Socket这家伙啊,不得已而用之.哈,Socket真的那么恐怖吗? 其实这话一点也不假,Socket有时候真的 ...

  5. Windows Phone开发(39):漫谈关键帧动画上篇 转:http://blog.csdn.net/tcjiaan/article/details/7550506...

    尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅仅针对两个值的目标值之间产生动画,如果使用By,将在原值和加上By ...

  6. Windows Phone开发(29):隔离存储C 转:http://blog.csdn.net/tcjiaan/article/details/7447469...

    本文是隔离存储的第三节,大家先喝杯咖啡放松,今天的内容也是非常简单,我们就聊一件东东--用户设置. 当然了,可能翻译为应用程序设置合适一些,不过没关系,只要大家明白,它就是用于保存我们的应用程序的设置 ...

  7. Windows Phone开发(27):隔离存储A 转:http://blog.csdn.net/tcjiaan/article/details/7425212...

    在很多资料或书籍上都翻译为"独立存储",不过,我想了一下,决定将IsolatedStorage翻译为"隔离存储",我想这样会更方便大家对这一概念的理解. 关于何 ...

  8. Windows Phone开发(36):动画之DoubleAnimation 转:http://blog.csdn.net/tcjiaan/article/details/7521388...

    从本节开始,我们将围绕一个有趣的话题展开讨论--动画. 看到动画一词,你一定想到Flash,毕竟WP应用的一个很重要的框架是Silverlight,在WP中也发挥了Silverlight的许多优点,可 ...

  9. Windows Phone开发(32):路径之PathGeometry 转:http://blog.csdn.net/tcjiaan/article/details/7469512...

    说起路径这玩意儿,其实说的就是Path类,它藏在命名空间System.Windows.Shapes下,应该好找,它有一个很重要的属性Data,你不妨在"对象浏览器"中把它抓出来看看 ...

  10. Windows Phone开发(13):如何规范用户的输入行为 转:http://blog.csdn.net/tcjiaan/article/details/7341513...

    很多时候,我们对用户的操作或输入做一定程度的限制,以避免发生不必要的异常或错误,因此,对一些特殊的类型,进行输入限制是很有必要的. 通改变屏幕键盘的显示模式可以规范和告诉用户, 这里应该输入什么. 要 ...

最新文章

  1. 给力!一行代码躺赚普通程序员10年薪资!
  2. ffmpeg4编解码例子
  3. linux命令 — lsof 查看进程打开那些文件 或者 查看文件给那个进程使用
  4. Web前端开发笔记——第四章 JavaScript程序设计 第五节 数组
  5. android 搜索工具栏,Android记事本在菜单栏添加搜索按钮方法
  6. 海信集团:通过数据来驱动企业的管理,让数据真正成为生产力
  7. efk使用_如何使用EFK创建开源堆栈
  8. 每个电脑都会自己的SID号和GUID号,而且不会相同。。
  9. 虚拟化VMware ESXi 6.7服务器安装配置
  10. python - 例题分析:工时与工资
  11. springboot打包错误:Failed to execute goal org.apache.maven.pluginsmaven-resources-plugin3.2.0
  12. 常见的图片比例有哪些?App中不同图片比例适用场景
  13. 解决vue google无状态播放音频文件
  14. 键盘等号坏了怎么办?键盘有的按键不灵了怎么办?怎么修改注册表?
  15. spring-mybatis源码解析
  16. 不出千元!打造耐用、高效SCSI硬盘系统(转)
  17. “春节回家带点啥?”一个愁人的选择题
  18. [译] npm 的经济风云 —— 下半部分
  19. JavaWeb开发工具
  20. 从contiki中下载程序到TelosB节点

热门文章

  1. nvcc-V 程序“nvcc”尚未安装。 您可以使用以下命令安装: sudo apt install nvidia-cuda-toolkit
  2. SQLServer数据库写入操作时报错:not all arguments converted during string formatting 问题解决
  3. SyntaxError: Non-ASCII character ‘\xe7’ in file car-training.py on line 7, but no encoding declared;
  4. 【Meachine Learning】lecture1 --吴恩达
  5. mysql 小类型_mysql数据类型
  6. truffle migrate 强制重新部署合约
  7. 小施同学的投资日记 开篇
  8. linux shell 获取系统当前时间 毫秒
  9. php 小米路由器_云水日记-捣鼓小米路由器开发版本
  10. 基于springboot的物资管理系统