模板允许定制一个元素的可视化树,而不影响他的功能。可视化树区别于逻辑树,逻辑树是控件元素之间的树状关系,而可视化树聚焦于一个元素的内部。模板的类型包括DataTemplate、ControlTemplate和ItemsPanelTemplate。
以ContentControl为例,它的ContentTemplate属性是DataTemplate类型,决定数据长成什么样子(数据显示结构);它的Template属性是ControlTemplate类型,决定控件本身长成什么样子(控件内部结构)。DataTemplate实例化后的一组控件,其树根是ContentPresenter控件,而ControlTemplate实例化为目标控件本身。进一步,ContentPresenter控件是ControlTemplate控件树上的一个结点,后续在编写ControlTemplate时,尤其要注意这一点,不要把内容控件部分遗漏。
一、DataTemplate用法
DataTemplate允许定制.NET对象的外观,也就是数据的外观,常用在以下3处:ContentControl的ContentTemplate属性,用于定制ContentControl内容的外观;ItemsControl的ItemTempldate属性,用于定制ItmsControl数据条目的外观;GridViewColumn的CellTemplate属性,相当于定制GridViewColumn单元格数据的外观。
1、ContentTemplate使用
ContentControl中包含ContentTemplate属性和Content属性,Content属性是ContentControl的内容,而ContentTempldate属性是用于显示内容的模板实例。
<Window x:Class="tt.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:tt"
mc:Ignorable="d"
Title="MainWindow" Height="150" Width="360">
<Window.Resources>
<DataTemplate x:Key="template1">
<TextBlock Text="{Binding}" FontSize="12" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
</DataTemplate>
</Window.Resources>
<Grid>