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>