WPF学习笔记--控件模板

来源:互联网 发布:mt4编程论坛 编辑:程序博客网 时间:2024/06/11 15:08

WPF只是定义了控件的作用,并没有定义控件的外观。我们可以使用控件模板来定义控件的外观。

Template是控件的一个属性,因此可以定义到样式中。

<Style x:Key="CalcButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Ellipse Fill="LightGreen" />
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Control.Margin" Value="10"/>
</Style>

这里定义的控件模板有其先天不足:没有显示按钮上的内容。需要添加ContentPresenter。

<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Fill="LightGreen"/>
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>

模板绑定

虽然样式很好的定义了一类控件,但是其定义的属性值都是在定义样式时固定死了的。如何能使控件指定自己独立的属性值呢?

我们需要使用模板绑定。

<Ellipse Fill="LightGreen" Stroke="{TemplateBinding Control.BorderBrush}"/>

这样就是把模板中的某一属性值绑定到了控件的某一属性上。

 

触发器

使用触发器,当触发条件满足时,触发器中的值和数据才会有效,如:

<Style x:Key="CalcButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse x:Name="theEllipse" Fill="LightGreen"
Stroke="{TemplateBinding Control.BorderBrush}"/>
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="Button.IsPressed" Value="True" >
<Setter TargetName="theEllipse"
Property="Fill" Value="Yellow"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>

原创粉丝点击