WPF Template模版之DataTemplate与ControlTemplate

1.DataTemplate与ControlTemplate的关系

  • 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是个数据和行为的载体、是个抽象的概念,至于它本身会长成什么样子(控件内部结构)、它的数据会长成什么样子(数据显示结构)都是靠Template生成的。决定控件外观的是ControlTemplate,决定数据外观的是DataTemplate,它们正是Control类的Template和ContentTemplate两个属性的值。它们的作用范围如图1所示。

图1

 

  • 凡是Template,最终都是要作用在控件上的,这个控件就是Template的目标控件,也叫模板化控件(Templated Control)。你可能会问:“DataTemplate的目标应该是数据呀,怎么会是控件?”DataTemplate给人的感觉的确是施加在了数据对象上,但施加在数据对象上生成的一组控件总得有个载体吧?这个载体一般是落实在一个ContentPresenter对象上。ContentPresenter类只有ContentTemplate属性、没有Template属性,这就证明了承载由DataTemplate生成的一组控件是它的专门用途。

 

  • 至此我们可以看出,由ControlTemplate生成的控件树其树根就是ControlTemplate的目标控件,此模板化控件的Template属性值就是这个ControlTemplate实例;与之相仿,由DataTemplate生成的控件树其树根是一个ContentPresenter控件,此模板化控件的ContentTemplate属性值就是这个DataTemplate实例。因为ContentPresenter控件是ControlTemplate控件树上的一个结点,所以DataTemplate控件树是ControlTemplate控件树的一棵子树。它们的关系如图2所示。
    • ContentPresenter 通常用在 ControlTemplate 中,作为一个占位符来表示“将实际内容放在这里”。

    • ContentControl 可以在任何地方使用,不一定在模板中使用。 它将获取为分配给它的内容类型定义的任何 DataTemplate

图2

 

 

参考资料:《深入浅出WPF》
posted @ 2023-03-29 17:00  青衫の剑客  阅读(145)  评论(0)    收藏  举报