首先理清幾個概念,Template、ControlTemplate、ContentTemplate、DataTemplate、ContentControl
這幾個東西名字都差不多,意思感覺也接近,初次接觸真的難以理解,那么現在開始區分了:
1.子類:
ContentControl是Control的子類,專門用於顯示內容的,如常用的Label就是ContentControl的子類
2.屬性:
Template 是Control類的一個屬性;
ContentTemplate是ContentControl的一個屬性;
3.類型:
Control的Template屬性是ControlTemplate類型的;
ContentControl的ContentTemplate屬性是DataTemplate類型的;
4.用途:
ControlTemplate,顧名思義,是控制控件外觀和結構的,一般對於某個控件的類型,如一個Button長什么樣子,Buttton里有一個列表,列表左側顯示圖片等;
DataTemplate,則是控制一個控件它的數據要如何呈現的,一般對於的是某種數據的類型,(一般是用來修飾其Content屬性的),所以要求為該類型的屬性賦值,
如:
Label的Content屬性賦值后,可以設置Label的ContentTemplate;
ItemsControl的ItemsSource屬性賦值后,可以設置其的ItemTemplate;
HeaderItemsControl的Header屬性賦值后,可以設置其的HeaderTemplate;
5.WPF模板類的繼承關系
FrameworkTemplate
派生出:
ControlTemplate(決定控件外觀)、ItemsPanelTemplate(決定集合的容器)、DataTemplate(決定數據的呈現方式)
而DateTemplate又派生出 HierarchicalDataTemplate(層次數據模板,一般用於TreeView和Menu)