---恢复内容开始---

正如标题中的两个拼接的单词所说,DataTemplate就是数据显示的模板,而ControlTemplate是控件自身的模板。(个人理解,错误请指出,谢谢)

我们看这二者在两类不同的控件中如何使用:

一:ItemsControl

  我们可以利用ControlTemplate来设置控件外表,用DataTemplate来填充控件内容。

<Page.Resources>
<DataTemplate x:Key="dataTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Name}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding Age}"></TextBlock>
<TextBlock Grid.Column="2" Text="{Binding Sex}"></TextBlock>
</Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <ListBox x:Name="itemsControl" Width="300" Height="400" ItemsSource="{Binding Mode=OneWay}" ItemTemplate="{StaticResource dataTemplate}">
<ListBox.Template>
<ControlTemplate>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" FontSize="20" Text="姓名"></TextBlock>
<TextBlock Grid.Row="0" Grid.Column="1" FontSize="20" Text="年龄"></TextBlock>
<TextBlock Grid.Row="0" Grid.Column="2" FontSize="20" Text="性别"></TextBlock>
<ItemsPresenter Grid.Row="1" Grid.ColumnSpan="3"> </ItemsPresenter> </Grid> </ControlTemplate>
</ListBox.Template> </ListBox>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Height="56" Margin="102,157,0,0" VerticalAlignment="Top" Width="190" Click="button_Click"/>
</Grid>

  对应的隐藏代码如下:

    public class Info
{
public string Name { get; set; } = "佚名";
public int Age { get; set; } = ;
public string Sex { get; set; } = "不详";
}
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent(); } private void button_Click(object sender, RoutedEventArgs e)
{
List<Info> list = new List<Info>();
list.Add(new Info());
list.Add(new Info { Age = , Name = "小莉", Sex = "女" });
list.Add(new Info { Age = , Name = "小桂子", Sex = "中" }); itemsControl.ItemsSource = list;
}
}

通过单击button,可以向列表控件中填充内容。

值得注意的是,列表表头在ControlTemplate中设置,而内标内容则是由DataTemplate通过数据绑定动态加载。

程序运行如下:

但是发现列表并没有按照表头的格式展开,这是因为ListBox中ListBoxItem中显示内容的宽度是自适应的。未来美观,我们作如下修改

设置ListBox的属性ItemContainerStyle如下:

<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
</Style>
</ListBox.ItemContainerStyle>

运行程序就发现如下显示了:

值得一提的是,我们在定义Info类的时候使用了C#6的新语法

public [类型] [变量名]{get;set;} = [初始化值];

好像跑题了。以上是ControlTemplate和DataTemplate在ItemsControl类型控件中的一个示例。而ContentControl类型控件中的用法也类似。唯一区别是在ContentTemplate中的ContentPresenter和ItemsPresenter之间。是哪种控件,就用哪种类型的Presenter。记住,设置了ContentTemplate,一定要设置ContentPresenter或ItemsPresenter,否则数

据不显示。

来点官方的

public sealed class ControlTemplate : Windows.UI.Xaml.FrameworkTemplate

public class DataTemplate : Windows.UI.Xaml.FrameworkTemplate

public class FrameworkTemplate : Windows.UI.Xaml.DependencyObject
Windows.UI.Xaml 的成员 摘要:
创建元素的元素树。FrameworkTemplate 是那些具有特定模板化行为(包括 ControlTemplate 和 DataTemplate)的类的基类。

通过上面的,你应该已经看出他们的共同点了。

至于核心的,在深入的。我也就不懂了。。该请教周家安,林政这些.net界的大牛了。向前辈致敬!

DataTemplate和ControlTemplate联系与区别的更多相关文章

  1. WPF DataTemplate與ControlTemplate

    一. 前言     什麼是DataTemplate? 什麼是ControlTemplate? 在stackoverflow有句簡短的解釋 "A DataTemplate, therefore ...

  2. DataTemplate和ControlTemplate的关系

    DataTemplate和ControlTemplate的关系(转载自haiziguo) 一.ContentControl中的DataTemplate 在开始之前,我们先去看一下ContentCont ...

  3. WPF Template模版之DataTemplate与ControlTemplate【一】

    WPF Template模版之DataTemplate与ControlTemplate[一] 标签: Wpf模版 2015-04-19 11:52 510人阅读 评论(0) 收藏 举报  分类: -- ...

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

    1. DataTemplate和ControlTemplate的关系 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概念,至于它 ...

  5. [WPF]如何使用代码创建DataTemplate(或者ControlTemplate)

    1. 前言 上一篇文章([UWP]如何使用代码创建DataTemplate(或者ControlTemplate))介绍了在UWP上的情况,这篇文章再稍微介绍在WPF上如何实现. 2. 使用Framew ...

  6. [UWP]如何使用代码创建DataTemplate(或者ControlTemplate)

    1. 前言 在UWP中DataTemplate是一个十分重要的功能,并且几乎无处不在,例如DataGrid中的DataGridTemplateColumn: <controls:DataGrid ...

  7. 【转】WPF Template模版之DataTemplate与ControlTemplate的关系和应用(二)

    1. DataTemplate和ControlTemplate的关系 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概念,至于它 ...

  8. WPF -- DataTemplate与ControlTemplate结合使用

    如深入浅出WPF中的描述,DataTemplate为数据的外衣,ControlTemplate为控件的外衣.ControlTemplate控制控件的样式,DataTemplate控制数据显示的样式,D ...

  9. 【转】WPF Template模版之DataTemplate与ControlTemplate(一)

    WPF系统不但支持传统的Winfrom编程的用户界面和用户体验设计,更支持使用专门的设计工具Blend进行专业设计,同时还推出了以模板为核心的新一代设计理念. 1. 模板的内涵 作为表现形式,每个控件 ...

随机推荐

  1. markdown语法学习效果预览

    注: 结合markdown官方文档 其中大部分例子和说明文字都摘自官方文档 官方链接:Markdown: Basics (快速入门). 一 段落.标题.区块代码 Markdown 支持两种标题的语法, ...

  2. JavaScript探秘系列

    此文章所在专题列表如下: 我们应该如何去了解JavaScript引擎的工作原理 JavaScript探秘:编写可维护的代码的重要性 JavaScript探秘:谨慎使用全局变量 JavaScript探秘 ...

  3. Java 编译报错:illegal character

    1.检查编译版本:1.5还是1.6 2.重新引用一下Jar包

  4. grep,awk和sed的常用命令和语法

    Grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:“m y s t r i n g”.这样做有两个原因,一是以防被误解为 s h ...

  5. Android TestView文本文字修改实例

    这里我们给大家总结了下关于Android TextView文本文字的常用两种应用,一种是像我们使用微信会看到长文件是可以折叠显示了,还有一种就是TextView文字颜色TextColor焦点效果,下面 ...

  6. 【PHP】金额数字转换成大写形式

    <?php /*将数字金额转成大写*/ function num_to_upper($num) { $d = array('零','壹','贰','叁','肆','伍','陆','柒','捌', ...

  7. http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站

    wordpress是世界上使用最多的php开源博客系统,功能强大,而且拥有众多的插件,可扩展性强. 最近,我也用它做了一个企业网站,欢迎浏览:http://www.shanghaihaocong.co ...

  8. Web serviser请求通道在等待 00:00:59.6479648 以后答复时超时。增加传递给请求调用的超时值,或者增加绑定上的 SendTimeout 值。分配给此操作的时间可能是更长超时的一部分。

    可以把sendTimeout调长一点试试 .net webService 中: 设置这些参数,延长连接时间, closeTimeout="00:10:00" openTimeout ...

  9. 【PHP】配置环境变量

    使用Zend Framework的zf.bat创建项目时,出现如下提示:"php.exe"不是内部或外部命令,也不是可运行的程序或批处理文件. 解决方法: 配置php的环境变量: ...

  10. GOOGLE 离线完整安装包下载地址

    https://support.google.com/chrome/answer/126299?hl=zh-Hans 官方链接介绍 https://www.google.com/chrome/brow ...