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>