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里给要改变的属性赋值就可以了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架