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

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

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

一:ItemsControl

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

  1. <Page.Resources>
  2. <DataTemplate x:Key="dataTemplate">
  3. <Grid>
  4. <Grid.ColumnDefinitions>
  5. <ColumnDefinition></ColumnDefinition>
  6. <ColumnDefinition></ColumnDefinition>
  7. <ColumnDefinition></ColumnDefinition>
  8. </Grid.ColumnDefinitions>
  9. <TextBlock Grid.Column="0" Text="{Binding Name}"></TextBlock>
  10. <TextBlock Grid.Column="1" Text="{Binding Age}"></TextBlock>
  11. <TextBlock Grid.Column="2" Text="{Binding Sex}"></TextBlock>
  12. </Grid>
  13. </DataTemplate>
  14. </Page.Resources>
  15. <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
  16.  
  17. <ListBox x:Name="itemsControl" Width="300" Height="400" ItemsSource="{Binding Mode=OneWay}" ItemTemplate="{StaticResource dataTemplate}">
  18. <ListBox.Template>
  19. <ControlTemplate>
  20. <Grid >
  21. <Grid.ColumnDefinitions>
  22. <ColumnDefinition></ColumnDefinition>
  23. <ColumnDefinition></ColumnDefinition>
  24. <ColumnDefinition></ColumnDefinition>
  25. </Grid.ColumnDefinitions>
  26. <Grid.RowDefinitions>
  27. <RowDefinition Height="auto"></RowDefinition>
  28. <RowDefinition></RowDefinition>
  29. </Grid.RowDefinitions>
  30. <TextBlock Grid.Row="0" Grid.Column="0" FontSize="20" Text="姓名"></TextBlock>
  31. <TextBlock Grid.Row="0" Grid.Column="1" FontSize="20" Text="年龄"></TextBlock>
  32. <TextBlock Grid.Row="0" Grid.Column="2" FontSize="20" Text="性别"></TextBlock>
  33. <ItemsPresenter Grid.Row="1" Grid.ColumnSpan="3">
  34.  
  35. </ItemsPresenter>
  36.  
  37. </Grid>
  38.  
  39. </ControlTemplate>
  40. </ListBox.Template>
  41.  
  42. </ListBox>
  43. <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Height="56" Margin="102,157,0,0" VerticalAlignment="Top" Width="190" Click="button_Click"/>
  44. </Grid>

  对应的隐藏代码如下:

  1. public class Info
  2. {
  3. public string Name { get; set; } = "佚名";
  4. public int Age { get; set; } = ;
  5. public string Sex { get; set; } = "不详";
  6. }
  7. public sealed partial class MainPage : Page
  8. {
  9. public MainPage()
  10. {
  11. this.InitializeComponent();
  12.  
  13. }
  14.  
  15. private void button_Click(object sender, RoutedEventArgs e)
  16. {
  17. List<Info> list = new List<Info>();
  18. list.Add(new Info());
  19. list.Add(new Info { Age = , Name = "小莉", Sex = "女" });
  20. list.Add(new Info { Age = , Name = "小桂子", Sex = "中" });
  21.  
  22. itemsControl.ItemsSource = list;
  23. }
  24. }

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

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

程序运行如下:

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

设置ListBox的属性ItemContainerStyle如下:

  1. <ListBox.ItemContainerStyle>
  2. <Style TargetType="ListBoxItem">
  3. <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
  4. </Style>
  5. </ListBox.ItemContainerStyle>

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

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

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

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

据不显示。

来点官方的

  1. public sealed class ControlTemplate : Windows.UI.Xaml.FrameworkTemplate
  2.  
  3. public class DataTemplate : Windows.UI.Xaml.FrameworkTemplate
  4.  
  5. public class FrameworkTemplate : Windows.UI.Xaml.DependencyObject
  6. Windows.UI.Xaml 的成员
  7.  
  8. 摘要:
  9. 创建元素的元素树。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. select,poll,epoll的归纳总结区分

    Select.Poll与Epoll比较 以下资料都是来自网上搜集整理.引用源详见文章末尾. 1 Select.Poll与Epoll简介 Select select本质上是通过设置或者检查存放fd标志位 ...

  2. PHP超时处理全面总结(转)

    [ 概述 ] 在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面 ...

  3. php实现在线下载程序安装包功能

    在线下载程序安装包可以很方便在服务器端下载各种程序安装包(Discuz!.phpwind.Dedecms.WordPress....等一些常用程序)并存储在服务器,大大减少站长上传程序安装包时间.默认 ...

  4. JAVA虚拟机学习笔记(一)Windows10下编译OpenJDK8

    转载请注明源地址:http://www.cnblogs.com/lighten/p/5906359.html 1. 编译环境的准备 1.1 JDK源码下载 OpenJDK是JAVA发展史中的一个开源项 ...

  5. SubsetsTotal Accepted:49746Total Submissions:176257My Submissions

    Subsets Total Accepted: 49746 Total Submissions: 176257My Submissions Given a set of distinct intege ...

  6. 搭建高性能计算环境(六)、应用软件的安装之lammps

    1,上传需要的软件包lammps-stable.tar.gz. 2,解压缩并进入安装目录 tar xvf lammps-stable.tar.gz cd lammps-30Oct14 3,如果需要re ...

  7. ASP.NET MVC5 高级编程 第3章 视图

    参考资料<ASP.NET MVC5 高级编程>第5版 第3章 视图 3.1 视图的作用 视图的职责是向用户提供界面. 不像基于文件的框架,ASP.NET Web Forms 和PHP ,视 ...

  8. 判断手机,pc方式登录

     <script type="text/javascript">         function browserDetect() {             var  ...

  9. %SELECTALL

    If you ever need to create a view that selects all fields from a particular record, then you should ...

  10. ASP.NET中Server对象的几个方法

    HtmlDecode 已重载. 对已被编码以消除无效 HTML 字符的字符串进行解码.HtmlEncode 已重载. 对要在浏览器中显示的字符串进行编码.MapPath 返回与 Web 服务器上的指定 ...