WPF中的数据模板(DataTemplate)(引用别人的文章 )

转载 2007年09月21日 21:34:00

本文件是引用别人的,地址: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中我们可以为自己的数据定制显示方式,也就是说虽然某数据数据是一定的,但我们可以做到让它的表现方式多种多样,比如一个时间,在以前我们一般使用一个字符串(比如“12:03”)来显示,但我们为什么就...
  • u014200184
  • u014200184
  • 2014年03月26日 13:33
  • 3541

(WPF)查找数据模板中的子元素

说明:严重抱歉,文章发表后,发现文中贴的代码有问题,现在进行修改。   最近,常与火星人交流心得,侃谈代码的艺术、学用之道,总之一句话,谈笑有鸿儒,往来无白丁。 但毕竟与火星人沟通,由于两个星球...
  • tcjiaan
  • tcjiaan
  • 2013年04月21日 10:29
  • 7442

WPF 点击 datatemplate 里面的控件,获取相应绑定的数据

这个文章的标题写的十分拗口,实际上是在WPF的资源字典中创建一个数据模板,并在数据模板中添加一个Button按钮,默认情况下,在窗体中单击应用了数据模板的ListBox控件数据项中的按钮时,是不会选中...
  • cqf696983pl
  • cqf696983pl
  • 2014年05月07日 16:53
  • 1816

继续聊WPF——动态数据模板

我为啥称之为“动态数据模板”?先看看下面的截图,今天,我们就是要实现这种功能。   大概是这样的,我们定义的DataTemplate是通过触发器动态应用到 ComboBoxItem 上。 这...
  • tcjiaan
  • tcjiaan
  • 2012年01月03日 08:41
  • 6151

WPF之DataTemplate的使用

一 概要 通过实例演示DataTemplate的基本用法,并通过实例来说明DataTemplate相关知识点。   二 实例操作 1 新建WPF应用程序WpfTemplateExp,程序结构如下图所示...
  • tiana0
  • tiana0
  • 2014年08月21日 20:27
  • 6831

WPF Template模版之DataTemplate与ControlTemplate的关系和应用【二】

1. DataTemplate和ControlTemplate的关系     学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概...
  • aoshilang2249
  • aoshilang2249
  • 2015年04月19日 13:18
  • 4267

DataTemplate-根据条件选择不同模板

为了不同的条件选择模板,可以实现一个DataTemplateSelector。 模板选择器是继承自DataTemplateSelector派生并重写了SelectTemplate方法并返回了你需要的模...
  • LH806732
  • LH806732
  • 2014年09月30日 16:47
  • 1170

Style.Trigger与DataTemplate.trigger(样式触发器与模板触发器)

以下样式触发器与模板触发器是等效的。 使用Style.Triggers:
  • gqqnb
  • gqqnb
  • 2013年09月08日 22:15
  • 4242

WPF中的模板(四)- 寻找ControlTemplate和DataTemplate的控件

一、WPF中的两棵树 WPF中每个控件的Template都是由ControlTemplate构成,ControlTemplate包含了构成该控件的各种子控件,这些子控件就构成了Vi...
  • lzhui1987
  • lzhui1987
  • 2016年07月25日 08:07
  • 2834

WPF DataTemplate绑定的简单学习

对于普通的实体类的绑定,如果只是简单的添加删除的话不需要用到INotifyPropertyChanged接口,这样的话比较简单,只需要在datatemplate中绑定后台的属性即可。然后直接往里面加入...
  • ccx_john
  • ccx_john
  • 2013年12月03日 13:53
  • 1297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF中的数据模板(DataTemplate)(引用别人的文章 )
举报原因:
原因补充:

(最多只允许输入30个字)