WPF中的数据模板(DataTemplate)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/30/694388.html
WPF中的数据模板(DataTemplate)
周银辉
在WPF中我们可以为自己的数据定制显示方式,也就是说虽然某数据数据是一定的,但我们可以做到让它的表现方式多种多样,比如一个时间,在以前我们一般使用一个字符串(比如“12:03”)来显示,但我们为什么就不能显示一个小时钟呢,其实这更合乎情理,利用WPF中的数据模板技术随意并轻松地表现你的数据.
数据模板适用于Content Control类控件与Items Control类控件.
我们假设有如下一个类
using System;
namespace Demo
{
public class People
{
private string name;
private string photo;
public People(string name, string photo)
{
this.name = name;
this.photo = photo;
}
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
public string Photo
{
get
{
return this.photo;
}
set
{
this.photo = value;
}
}
}
}
这个类很简单地表示了一个人,他的姓名和他的照片(路径)
如果在我们的软件中有一个列表控件ListBox来显示一个由多个人组成的列表,在.net 3.0以前我们可能就只能用文本来列出人的姓名而已,或者花不少的精力来重写列表控件以便在列表中在显示人名的同时显示照片.
参考以下代码:
<ListBox x:Name="ListBox_PeopleList" ItemTemplate="{StaticResource MyTemplate}" />我们定义了一个ListBox,并将其ItemTemplate制定为我们自定义的MyTemplate,也就是说列表项将按照MyTemplate制定的方式来显示列表内容。
这样我们就可以发挥我们的想像力来自定义MyTemplate
为了能在XAML中使用我们的People类,我们需要将其名字空间引入,参考以下代码:
xmlns:demo="clr-namespace:Demo" 其中Demo是我们的People类所在的名字空间,以后可以使用demo来表示这个名字空间了.
下面的代码来定义我们的MyTemplate模板,以便告诉我们的列表如何来显示他的项目:
<Window.Resources>
<!--列表模板-->
<DataTemplate x:Key="MyTemplate" DataType="{x:Type demo:People}">
<Grid VerticalAlignment="Center" HorizontalAlignment="Center" Margin="4,4,4,4" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding Photo}" Width="50" Height="50" Grid.Column="0" Grid.RowSpan="1"/>
<TextBlock Text="{Binding Name}" Grid.Column="1" Grid.ColumnSpan="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</Window.Resources>我们将模板定义为窗口的资源,资源保存在一个资源字典中的,x:Key="MyTemplate" 表示其在资源字典中的键,DataType="{x:Type demo:People}"表示该数据模板针对的数据类型是demo名字空间下的People类,接下来在Gird中我们定义了该数据模板的视觉树,这也是我们的工作重心,即该视觉树定义了如何显示我们的数据。我们使用了一个Image控件并将其Source绑定到People的Photo属性上,这样以便在该Imag控件上显示照片,然后在Image的右边我们使用一个TextBlock控件来显示人名(将People的Name属性绑定到TextBlock的Text属性上)。
注意到这个数据模板实际上在干什么:它定义了People类型对象的表现方式,在这里是显示People的照片并在照片的右方显示姓名。
以后我们需要People对象按这种方式展示给用户的时候,我们只要将该数据模板指定给要显示People对象的那个控件就可以了。
比如
<ListBox x:Name="ListBox_PeopleList" ItemTemplate="{StaticResource MyTemplate}" />就告诉我们的列表控件按照MyTemplate定义的方式来显示其项目。
呵呵,这样是不是比以前Code方式来打造一个个性列表控件来得更方便。
WPF中的数据模板(DataTemplate)(转)的更多相关文章
- WPF中的数据模板(DataTemplate)
原文:WPF中的数据模板(DataTemplate) WPF中的数据模板(DataTemplate) ...
- WPF中的数据模板使用方式之一:ContentControl、ContentTemplate和TemplateSelector的使用
在WPF中,数据模板是非常强大的工具,他是一块定义如何显示绑定的对象的XAML标记.有两种类型的控件支持数据模板:(1)内容控件通过ContentTemplate属性支持数据模板:(2)列表控件通过I ...
- wpf中的数据模板
wpf中的模板分为数据模板和控件模板,我们可以通过我们自己定制的数据模板来制定自己想要的数据表现形式.例如:时间的显示可以通过图片,也可以通过简单数字表现出来. 例如: (1)先在Demo这个命名空间 ...
- WPF 后台获得 数据模板里的内容控件(DataTemplate)
原文:WPF 后台获得 数据模板里的内容控件(DataTemplate) 假如 <Window.Resources> 里 有一个 Datatemplate 我想获得TextBlo ...
- WPF中的数据验证
数据验证 WPF的Binding使得数据能够在数据源和目标之间流通,在数据流通的中间,便能够对数据做一些处理. 数据转换和数据验证便是在数据从源到目标 or 从目标到源 的时候对数据的验证和转换. V ...
- WPF 中获取DataGrid 模板列中控件的对像
WPF 中获取DataGrid 模板列中控件的对像 #region 当前选定行的TextBox获得焦点 /// <summary> /// 当前选定行的TextBox获得焦点 /// &l ...
- WPF中的菜单模板
原文:WPF中的菜单模板 资源字典代码如下: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xa ...
- WPF的ComboBox 数据模板自定义
WPF的ComboBox 有些时候不能满足用户需求,需要对数据内容和样式进行自定义,下面就简要介绍一下用数据模板(DataTemplate)的方式对ComboBox 内容进行定制: 原型设计如下: 步 ...
- 在WPF中获取DataGridTemplateColumn模板定义的内容控件
xaml格式描述: <DataGrid Name="dataGrid" Grid.Row="1" ItemsSource="{Binding}& ...
随机推荐
- 顶 兼容各种浏览器js折叠菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- MYSQL性能查看(命中率,慢查询)
网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...
- 机器学习中的算法-决策树模型组合之随机森林与GBDT
机器学习中的算法(1)-决策树模型组合之随机森林与GBDT 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使 ...
- 王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第十一讲Hadoop图文训练课程:MapReduce的原理机制和流程图剖析
这一讲我们主要剖析MapReduce的原理机制和流程. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发 ...
- 桶排序-C-结构体排序
struct TS { int index; ]; }; ] = {{,,,,,"s8"}}; ]; int i; int length = sizeof(a) / sizeof ...
- mysql基础知识(5)--视图
视图 单词:view 什么是视图: 视图可以看作是一个“临时存储的数据所构成的表”(非真实表),其实本质上只是一个select语句.只是将该select语句(通常比较复杂)进行一个“包装”,并设定了一 ...
- 【多线程】Java线程面试题 Top 50(转载)
Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎 ...
- 杭电1010Tempter of the Bone
Tempter of the Bone Problem Description The doggie found a bone in an ancient maze, which fascinated ...
- day09(sql基础01)
SQL语言的分类 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1:数据查询语言DQL Q = Query 数据查询语言DQL用于检索 ...
- win7 文件共享 xp
前几天因为需要将win7内一文件夹共享给XP使用,因为NT5跟NT6安全机制的问题,共享的实现没有XP共享的方便,很多人是牺牲(关闭)了win7的系统防火墙才达到共享给XP的目的,但是关闭防火墙势必会 ...