控件模板可对控件的内容和样式均做出改变。
项目源码
防止两个按钮,第一个为普通按钮,第二个应用了控件模板:
<Window.Resources>
<ControlTemplate x:Key="ButtonTemplate" TargetType="{x:Type Button}">
<Border BorderBrush="Orange" BorderThickness="3" CornerRadius="2" Background="Red" TextBlock.Foreground="White">
<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center">
</ContentPresenter>
</Border>
</ControlTemplate>
</Window.Resources>
<StackPanel Margin="5">
<Button Margin="5" Padding="3" Content="普通按钮"/>
<Button Margin="3" Padding="3" Template="{StaticResource ButtonTemplate}"><!--使用模板,以资源格式-->
模板化按钮
</Button>
</StackPanel>
我们修改了Padding属性为:Padding=“23”,但是没有发生任何属性,原因是在StackPannel中并不关注Padding的值,只关注Margin的值,要想改变,就要在模板中绑定:Margin="{TemplateBinding Padding}",让StackPannel注意按钮中内容的Margin而不是按钮的Padding。
我们设置当鼠标划过按钮时,背景颜色变为深红色,在Template中设置触发器:
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="DarkRed"/>
</Trigger>
</ControlTemplate.Triggers>
这样就实现了效果。
还可以在一个触发器中添加多个设置器:
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="border" Property="Background" Value="Blue"/>
<Setter TargetName="border" Property="BorderBrush" Value="IndianRed"/>
</Trigger>