1.样式:
样式(Style)是组织和重用格式化选项的重要工具。样式封装了一系列属性设置细节。
尽管可以使用资源存储各种对象,但是使用资源最常见的原因之一是通过它们保存样式。
1.1 简单的样式例子
本例中,在资源中定义一个按钮文本字体样式,然后Button1使用该样式。
样式的定义:
<Window.Resources>
<Style x:Key="BigFontStyle">
<Style.Setters>
<SetterProperty="Control.FontFamily" Value="Times NewRoman"></Setter>
<SetterProperty="Control.FontSize" Value="30"></Setter>
<Setter Property="Control.FontWeight"Value="Bold"></Setter>
<SetterProperty="Control.Background">
<Setter.Value>
<ImageBrushImageSource="C:\\Image1.bmp"></ImageBrush>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Window.Resources>
样式的使用1:
<StackPanel>
<Button Name="button1" Content="Button1"Style="{StaticResource BigFontStyle}"></Button>
<Button Name="button2" Content="Button2"></Button>
</StackPanel>
样式的使用2(C#代码实现):
this.button1.Style= (Style)TryFindResource("BigFontStyle");
表1.1 Style类的属性
属性 | 说明 |
Setters | 包含Setter和EventSetter对象集合 |
Triggers | 当属性改变时触发修改样式 |
Resources | 希望用于样式的资源集合 |
BasedOn | 可创建继承样式 |
TargetType | 标识该样式应用到的元素类型 |
1.2属性设置器(Setters的Setter)
写法1:
<Window.Resources>
<Style x:Key="BigFontStyleButton">
<Style.Setters>
<Setter Property="Button.FontFamily" Value="Times NewRoman"></Setter>
<Setter Property="Button.FontSize" Value="30"></Setter>
<Setter Property="Button.FontWeight"Value="Bold"></Setter>
<Setter Property="Button.Background">
<Setter.Value>
<ImageBrushImageSource="C:\\Image1.bmp"></ImageBrush>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Window.Resources>
写法2(简化):
<Window.Resources>
<Style x:Key="BigFontStyleButton" TargetType="Button">
<Style.Setters>
<SetterProperty="FontFamily" Value="Times NewRoman"></Setter>
<SetterProperty="FontSize" Value="30"></Setter>
<SetterProperty="FontWeight" Value="Bold"></Setter>
<SetterProperty="Background">
<Setter.Value>
<ImageBrushImageSource="C:\\Image1.bmp"></ImageBrush>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</Window.Resources>
1.3事件设置器(Setters的EventSetter)
下面是事件设置器的用法。事实上事件设置器很少使用,都是用事件触发器代替的。
XAML标记代码:
<Window.Resources>
<Style x:Key="MouseOverHightLightStyle"TargetType="TextBox">
<Style.Setters>
<EventSetterEvent="MouseEnter"Handler="mouseEnter_Event"></EventSetter>
<EventSetterEvent="MouseLeave"Handler="mouseLeave_Event"></EventSetter>
<SetterProperty="FontSize" Value="40"></Setter>
</Style.Setters>
</Style>
</Window.Resources>
<StackPanel>
<TextBox Style="{StaticResourceMouseOverHightLightStyle}">TextBox</TextBox>
</StackPanel>
事件处理代码:
private void mouseEnter_Event(objectsender, MouseEventArgs e)
{
((TextBox)sender).Background = new SolidColorBrush(Colors.Red);
}
private void mouseLeave_Event(object sender, MouseEventArgs e)
{
((TextBox)sender).Background = null;
}
1.4样式的继承(BasedOn)
样式之间可以像类继承一样继承。
<Window.Resources>
<Style x:Key="MouseOverHightLightStyle"TargetType="TextBox">
<Style.Setters>
<EventSetterEvent="MouseEnter"Handler="mouseEnter_Event"></EventSetter>
<EventSetterEvent="MouseLeave" Handler="mouseLeave_Event"></EventSetter>
<SetterProperty="FontSize" Value="40"></Setter>
</Style.Setters>
</Style>
<Style x:Key="BasedOnMouseOverHightLightStyle"TargetType="TextBox" BasedOn="{StaticResource MouseOverHightLightStyle}">
<Setter Property="Background"Value="Cyan"></Setter>
<Setter Property="Foreground"Value="Yellow"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<TextBox Style="{StaticResource BasedOnMouseOverHightLightStyle}">TextBox</TextBox>
</StackPanel>
1.5通过控件类型自动应用样式
使用TargetType,但是不定义x:Key,则所有该类型的控件都会默认只用该样式。
例子1(样式类型是TextBox):
<Window.Resources>
<Style TargetType="TextBox">
<Style.Setters>
<SetterProperty="FontSize" Value="40"></Setter>
</Style.Setters>
</Style>
</Window.Resources>
<StackPanel>
<TextBox>TextBox</TextBox>
<Button Name="button1" Content="Button1"></Button>
</StackPanel>
<Window.Resources>
<Style TargetType="Button">
<Style.Setters>
<SetterProperty="FontSize" Value="40"></Setter>
</Style.Setters>
</Style>
</Window.Resources>
<StackPanel>
<TextBox>TextBox</TextBox>
<Button Name="button1" Content="Button1"></Button>
<Button Name="button2" Content="Button2"Style="{x:Null}"></Button>
</StackPanel>