WPF:Data Template

翻译 2017年04月17日 10:50:41

  Data Template 用于在一个或者多个控件上绑定并映射数据显示,适用于内容控件或者条目控件, Data Template 可以被用在两个地方:

  1. 作为ContentControl的ContentTemplate 属性的值(例如:label)
  2. 作为ItemsControl的ItemTemplate属性的值(例如:ListBox)
 下面是一个作为Lable控件的ContentTemplate的例子,假定存在数据类Temp:
<Label Name="lblPerson">
    <Label.ContentTemplate>
        <DataTemplate>
            <Border BorderThickness="2" BorderBrush="DarkBlue">
                <StackPanel Orientation="Vertical">
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding Path=Temp.FirstName}"/>
                        <Label Content="{Binding Path=Temp.LastName}" FontWeight="Bold"/>
                    </StackPanel>
                    <Label Content="{Binding Path=Temp.BirthYear}" FontStyle="Italic"/>
                </StackPanel>
            </Border>
        </DataTemplate>
    </Label.ContentTemplate>
</Label>

这是一个作为ListBox控件的ItemTemplate的例子,假定存在数据集合ActorList

<ListBox Margin="15" Width="270" Height="320"
       ItemsSource="{Binding ActorList}">
      <ListBox.ItemTemplate>
          <DataTemplate>
              <StackPanel Orientation="Horizontal">
                  <Image Source="{Binding Image}" Height="80"/>
                  <StackPanel Margin="5">
                      <TextBlock Text="{Binding FullName}" FontSize="12" FontWeight="Bold"/>
                      <TextBlock Text="{Binding Dates}"/>
                      <TextBlock Text="{Binding KnownFor}" Margin="0,5,0,0" FontStyle="Italic"/>
                  </StackPanel>
                  <Label Content="Dead Fred !" Foreground="Red"
                         FontWeight="Bold"
                         Visibility="{Binding Converter={StaticResource deadFredConverter}}"/>
              </StackPanel>
          </DataTemplate>
      </ListBox.ItemTemplate>
  </ListBox>

  ContentTemplate 与ItemTemplate 属性经常被用在以下方面:
  1. ContentTemplate 作为ContentPresenter内容,控件的控件模板中默认包含ContentPresenter
  2. ItemTemplate 作为由ItemsPresenter提供的每一条目的内容模板。

 下面是一个Label控件的默认控件模板代码片段,能够发现它包含一个ContentPresenter作为控件模板的内容模板。

<ControlTemplate TargetType="{x:Type Label}">
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>


WPF中的数据模板(DataTemplate)

在WPF中我们可以为自己的数据定制显示方式,也就是说虽然某数据数据是一定的,但我们可以做到让它的表现方式多种多样,比如一个时间,在以前我们一般使用一个字符串(比如“12:03”)来显示,但我们为什么就...
  • u014200184
  • u014200184
  • 2014年03月26日 13:33
  • 3543

WPF Template模版之DataTemplate与ControlTemplate【一】

WPF系统不但支持传统的Winfrom编程的用户界面和用户体验设计,更支持使用专门的设计工具Blend进行专业设计,同时还推出了以模板为核心的新一代设计理念。 1. 模板的内涵     作为表现形式,...
  • aoshilang2249
  • aoshilang2249
  • 2015年04月19日 11:52
  • 5821

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

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

WPF Template

1.     为什么用模板 模板是用来定义(或重定义)对象的外观的好东西. WPF已经提供了Style来自定义外观, 那为什么还需要Template呢? 是因为Style只能让你一个一个地设置对...
  • chuwachen
  • chuwachen
  • 2013年02月18日 14:51
  • 6785

WPF Template模版之Style【四】

Style直译过来就是“风格”,“样式”。拿人来举例,人的风格指静态的外观和行为举止。同样一个人,如果留平头、穿上足球队的队服、脚蹬战靴,看上去就是一名叱咤球场的运动员;如果让他换一身笔挺的西装、穿上...
  • aoshilang2249
  • aoshilang2249
  • 2015年04月19日 14:56
  • 2089

WPF中的模板(二)- ControlTemplate

一、TextBox控件的内部结构 首先,我们先利用Blend解开TextBox控件的内部结构。利用Blend新建一个WPF项目,在界面上添加一个TextBox。 我们看到,TextBox的...
  • lzhui1987
  • lzhui1987
  • 2016年07月11日 10:53
  • 917

动态添加DataTemplate且为模板中的button控件添加Click Event

动态添加DataTemplate且为模板中的button控件添加Click Event 动态生成DataTemplate  private DataTemplate GetData...
  • yqj234
  • yqj234
  • 2016年03月14日 17:15
  • 387

WPF中模板(ControlTemplate and DataTemplate)

WPF中的模板是一个特别重要的概念,对于做UI开发的同学来说熟悉ControlTemplate(控件模板) 和DataTemplate(数据模板)是必须掌握的技能,否则就只能做个拖控件的菜鸟。 下面...
  • lhx527099095
  • lhx527099095
  • 2012年09月21日 13:58
  • 8112

WPF TreeView HierarchicalDataTemplate

HierarchicalDataTemplate 的DataType是本层的绑定,而ItemsSource是绑定下层的对象集合,它只能使用两层集合,如MonTemp,如果要用到三层以上,需要两个Hie...
  • zh_geo
  • zh_geo
  • 2013年09月03日 09:19
  • 2069

WPF 遍历DataTemplate(获取所有控件)

情况1:在设定DataTemplate的Name,并且他是在前台表示时,获取DataTemplate里的指定控件。 方法: http://blog.csdn.net/wackelbh/ar...
  • wushang923
  • wushang923
  • 2011年09月02日 13:29
  • 11329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF:Data Template
举报原因:
原因补充:

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