在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件
比如说我们想将窗口中的所有按钮都保持某一种风格:
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Blue"/> //设置按钮颜色
<Setter Property="FontFamily " Value="CourierNew"/> //设置字体
</Style>
</Window.Resources>
我们声明了一个Style,它被声明在Window.Resources中说明它的有效范围是当前窗体,TargetType="Button" 指示该Style的作用对象是Button类的实例,也就是说在当前窗体中的所有Button实例都将受到该Style的影响(除非某Button有明确地指明它所使用的是另外的Style)。
如果不想全部针对所有的Button怎么办?
我们为Style添加一个x:Key="ButtonStyle"
<Window.Resources>
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="Foreground" Value="Blue"/>
<Setter Property="FontFamily " Value="CourierNew"/>
</Style>
</Window.Resources>
然后Button:
<Button>normal button</Button> //不控制的Button
<Button Style="{StaticResource ButtonStyle}">styled button</Button> //控制的Button
----------------------------------------------------------------------
Button不同状态下的颜色(按下的颜色、抬起颜色恢复)
我们可以在Style中添加Trigger(触发器) 除此之外,与类的继承原理相类似,我们还可以使用BaseOn来使一个Style“继承”另一个Style。
<Style TargetType="Button" x:Key="TriggerButtonStyle" BasedOn="{StaticResource ButtonStyle}">
<Style.Triggers>
<Trigger Property="IsPressed" Value="True"> //当Button的IsPressed属性值变为True的时候
<Setter Property="Foreground" Value="Red"/> //做当前设置。
</Trigger>
</Style.Triggers>
</Style>
我们所声明的第二个Style,即TriggerButtonStyle,它“继承”于ButtonStyle,那么TriggerButtonStyle将会从ButtonStyle那里得到蓝色CourierNew文本的性质。然后我们使用了Trigger来响应鼠标按下。
<Button Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="2" Grid.RowSpan="1" Style="{StaticResource TriggerButtonStyle}">trigger button</Button> //这个Button具有按下的属性