博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ControlTemplate & DataTemplate
阅读量:5875 次
发布时间:2019-06-19

本文共 1329 字,大约阅读时间需要 4 分钟。

ControlTemplate和DataTemplate都是用于定制控件的外观,但两者有着很大的区别。

ControlTemplate服务于Control(有形的控件),而DataTemplate服务于Data(无形的数据)。

换句话说,ControlTemplate用于将已有的外观进行改造,DataTemplate是从无到有地构建外观。

 

ContentControl、ItemsControl类型

  • ContentControl,它的Content属性包含单个元素,例如Button
  • ItemsControl,它的Items属性包含多个元素,例如Listbox

 

ContentPresenter、ItemsPresenter类型

平常的使用中,可以认为这些Presenter是占位符,用于ControlTemplate的定义中,代表了控件原本的Content。

以ContentControl为例,它有一个ContentPresenter类型的属性,如果其值是一个UIElement,那就直接显示这个UIElement,但如果是某个无形的数据,就要让ContentPresenter的值是一个DataTemplate。

 

ControlTemplate类型

ControlTemplate的代表:

  • ContentControl类型的Template属性
  • ItemsControl类型的Template属性

ControlTemplate类型中常见到{TemplateBinding 属性名},一般表示与原有控件的属性绑定。

 

DataTemplate类型

DataTemplate的典型代表:

  • ContentControl类型的ContentTemplate属性
  • ItemsControl类型的ItemTemplate属性

DataTemplate类型中常见到{Binding …},表示数据绑定。

 

 

以下不属于Template,但是经常会与Template一起出现,所以写在这里。

 

ItemsPanel类型

表示ItemsControl各个Item是如何布局的,常用的也就是StackPanel横过来竖过来这些。

 

ItemContainerStyle类型

定制ItemsControl中各个Item的Style。如果要定制ItemsControl总框架的Style,就直接用ItemsControl的Style属性。

 

我的体会

DataTemplate比ControlTemplate更常用。

了解一个控件的Template(ControlTemplate类型),需要用blend查看控件的VisualTree,查起来改起来都比较麻烦。但有些情况下用ControlTemplate很有效率,例如把所有的TextBox都换成圆角的、给button改个形状加个图片。对于伤筋动骨的改造,需要ControlTemplate,而对于一般的描眉画眼(给现有的属性赋新值),只需要在Style的Setter里给要改变的属性赋值就可以了。

转载于:https://www.cnblogs.com/dc10101/archive/2011/12/08/2280117.html

你可能感兴趣的文章
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
关于链接文件的探讨
查看>>
android app启动过程(转)
查看>>
Linux—源码包安装
查看>>
JDK8中ArrayList的工作原理剖析
查看>>
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>