1、WPF中Template是一个ControlTemplate类型的对象,WPF可由用户根据应用需要定制应用的界面呈现内容及方式,而ControlTemplate就是相关控件界面外观的决定性因素之一,对于 一个按钮控件而言,你可以采用类似的方式定义Button控件的界面外观。参考代码如下:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}" >
<Border Background="{DynamicResource CornerButtonStyleBrush}" x:Name="border" BorderBrush="{StaticResource CornerBorderBrush}" CornerRadius="3,3,3,3" BorderThickness="2,2,2,2" SnapsToDevicePixels="true" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}">
<ContentPresenter x:Name="contentPresenter" Content="{TemplateBinding Content}" HorizontalAlignment="Center" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" OpacityMask="Black"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="true">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource CBorderMouseBrush}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource CornerBorderBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="true">
<Setter Property="Background" TargetName="border" Value="{StaticResource CBorderMouseBrush}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource CornerBorderBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="border" Value="{StaticResource CornerDisableBrush}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource CornerBorderBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
在控件模板中主要定了界面的外观呈现方式,以及 响应事件是界面的外观呈现方式。
在单项内容控件中,即ContentControl控件,如:Button、Lable等类控件中,提供了ContentTemplate属性,该属性是一个类型为 DataTemplate类型的对象,在ContentTemplte 中你不仅仅可以定义控件的外观呈现方式,还可以通过数据绑定的方式与DataContext对象的属性绑定,实现数据驱动模式的内容呈现。这一类的数据绑定方式可以应用于ContentControl类型控件的内容于后台数据的绑定,更多应用于 ItemsControl类控件,实现和后台多项数据内容的绑定。如图形方式呈现电影院座位的样式代码:
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel Width="{Binding (FrameworkElement.ActualWidth), RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}"></WrapPanel>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Button x:Name="seatBtn" Style="{StaticResource SeatsBtnStyle}" Content="{Binding Numbers}" Visibility="{Binding Used}" Tag="{Binding Status}"></Button>
<DataTemplate.Triggers>
<Trigger Property="Tag" Value="0">
<Setter Property="Background" Value="Beige" TargetName="seatBtn"/>
</Trigger>
<Trigger Property="Tag" Value="1">
<Setter Property="Background" Value="Red" TargetName="seatBtn"/>
</Trigger>
<Trigger Property="Tag" Value="2">
<Setter Property="Background" Value="Green" TargetName="seatBtn"/>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</Setter.Value>
</Setter>
控件模板适合对控件的依赖属性进行模板绑定,数据模板用于绑定数据源的一个或多个数据对象