熟悉网页制作的朋友都知道,样式表是制作网页非常好用的修饰方法。在WPF里,也可以使用样式。
<Window.Resources>
<SolidColorBrush x:Key="myBrush" Color="Red" />
<Style x:Key="CalcButtonStyle" TargetType="Button">
<Setter Property="Margin" Value="5"/>
<Setter Property="BorderBrush" Value="{DynamicResource myBrush}"/>
</Style>
</Window.Resources>
这里定义了一个样式,使得窗体中所有的按钮,其属性值使用样式中的属性。
TargetType指明样式所使用的类型。如果没有给TargetType赋值,则在Setter定义时,需要提供更多信息:
<Setter Property="Button.Margin" Value="5"/>
如果希望样式的使用范围更广,也可以这样定义:
<Setter Property="Control.Margin" Value="5"/>
在定义样式时,也可以定义不是应用到所有对象的属性:
<Style x:Key="ButtonOrTextBox" TargetType="Control">
<Setter Property="Margin" Value="5"/>
<Setter Property="BorderBrush" Value="{DynamicResource myBrush}"/>
<Setter Property="TextBox.MaxLength" Value="100"/>
</Style>
其中MaxLength属性,在Button中是不存在的,因此当此样式应用到按钮上,MaxLength不起作用。
定义了Style之后,使用的方法如下:
<Button Grid.Column="0" Grid.Row="3"
Style="{StaticResource CalcButtonStyle}"
Name="button4" Click="OnClickDigit">4</Button>
即为对象的Style赋值。
也可以在Style中定义事件对应的方法。
<Style x:Key="CalcButtonStyle" TargetType="Button">
<Setter Property=" Margin" Value="10"/>
<Setter Property="BorderBrush" Value="{DynamicResource myBrush}"/>
<EventSetter Event="Click" Handler="OnButtonClicked"/>
</Style>
使用BasedOn,可以在其它样式的基础上,定义样式。
<Window.Resources>
<SolidColorBrush x:Key="myBrush" Color="Red" />
<Style x:Key="CalcButtonStyle" TargetType="Button">
<Setter Property="FrameworkElement.Margin" Value="10"/>
<Setter Property="BorderBrush" Value="{DynamicResource myBrush}"/>
</Style>
<Style x:Key="DigitButtonStyle"
BasedOn="{StaticResource CalcButtonStyle}"
TargetType="Button">
</Style>
<Style x:Key="OperatorButtonStyle"
BasedOn="{StaticResource CalcButtonStyle}"
TargetType="Button">
<Setter Property="BorderBrush" Value="Green"/>
<Setter Property="FontWeight" Value="UltraBold"/>
</Style>
</Window.Resources>
在代码中,使用样式和使用资源的方法是一样的。
button1.Style =
(Style)FindResource("DigitButtonStyle"
);
如果没有给Style定义Key,则默认使用于所有TargetType类型的。
我们也可以这样,寻找没有定义Key的属性:
<Button Style="{StaticResource {x:Type Button}}" />