ControlTemplate类的作用是重新定义控件的视觉效果和触发状态。控件在获取焦点或者被按下时,一般会显示出不同的状态,以便于用户区分。系统控件的视觉状态都是事先已经设定好的。这样做的好处是,可以复用已有的代码,大大节省了UI界面开发周期。有时候,用户需要为控件设定自己想要的视觉效果,比如:按钮控件的皮肤,指定为自定义的风格。这时,就需要借助ControlTemplate类。以下是一个简单的例子:
<Style x:Key="ButtonStyleLogin" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<StackPanel Orientation="Horizontal">
<Image x:Name="minBtn" Source="Resources/login/013.png" />
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Source" Value="Resources/login/013_f.png" TargetName="minBtn" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Source" Value="Resources/login/013_p.png" TargetName="minBtn" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
简单的解释下以上的代码。
该代码片段的作用是为按钮控件提供一个自定义的Style(按钮风格)。按照行的顺序依次标号并解释如下:
1. 该Style作为应用程序资源的一部分,拥有资源键"ButtonStyleLogin"。之后指明了该Sytle的作用类型是Button
2. 定义Button类的Template,修改Button的风格,也就是前面提到的自定义按钮控件的视觉和触发效果。
3. Property-Value对中的Value
4. 定义一个ControlTemplate元素对象,赋值给Button.Template。指定该ControlTemplate元素对象的类型是Button
5~7. 定义在正常状态下按钮的视觉表现效果。布局为水平,背景图片选取”Resources/login/013.png",并指明Image对象名“minBtn”(为后面定义触发状态准备)
8~end. 定义触发效果。当鼠标停留或者按下时,选取不同背景图片。