我的WPF很弱,很多時候寫的是一塌糊塗的,在這里感謝nonocast,Tommy和Joans給予的幫助。謝謝你們在工作中給予的指導和幫助,讓我少走很多彎路。
已經很久不用WPF編程了,正好最近的項目要用到它,所以要把遺忘的WPF重新學習一下了。翻出之前寫的blog,WPF樣式(style),寫的很簡單,就把之前寫的那篇叫WPF樣式(style)(1)啦,現在這篇為WPF樣式(style)(2)吧。
Style是屬性設置的集合。可以給同一種類的不同實例設置相同的Style。前提是這個類必須是派生自 FrameworkElement 或 FrameworkContentElement 。
Style通常在 Resources 節內部聲明為資源。
1. Style的有效范圍
1.1 如果在Application.Resources中聲明Style,則它的有效范圍是整個程序
View Code
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/Style.xaml" />
<ResourceDictionary Source="Themes/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
1.2 如果在Window.Resources中聲明Style,則它的有效范圍是當前窗體
View Code
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Width" Value="75"></Setter>
<Setter Property="Height" Value="85"></Setter>
<EventSetter Event="Click" Handler="Button_Click"></EventSetter>
</Style>
</Window.Resources>
1.3 如果在其他控件(例如Grid)的Resources中聲明Style,則它的有效范圍就是這個控件
View Code
<Grid.Resources>
<Style TargetType="Button">
<Setter Property="Width" Value="75"></Setter>
<Setter Property="Height" Value="85"></Setter>
<EventSetter Event="Click" Handler="Button_Click"></EventSetter>
</Style>
</Grid.Resources>
注:
Style中如果只寫了TargetType="Button",沒有寫x:Key,則Style有效范圍內的Button的Style默認都是這個Style。
Style中如果寫x:Key=“buttonStyle1”了,則引用此Style的方法為Style="{StaticResource buttonStyle1}"
2. Style可以用BaseOn來“繼承”另一個Style
View Code
<Window.Resources> <Style TargetType="Button" x:Key="buttonstyle1"> <Setter Property="Height" Value="60"></Setter> <Setter Property="Width" Value="60"></Setter> </Style> <Style TargetType="Button" BasedOn="{StaticResource ResourceKey=buttonstyle1}"/> </Window.Resources>
3. TargetType
如果沒有給Style指定TargetType,則在寫Style時,必須給每個屬性添加類型,這樣不同的類型可以共用同一個Style:
View Code
<Style x:Key="Style1"> <Setter Property="Button.Width" Value="80"></Setter> <Setter Property="Button.Height" Value="80"></Setter> <Setter Property="TextBlock.Text" Value="HelloWorld"></Setter> </Style>
注:將Style1同時指定給Button和TextBlock,Button會自動忽略不適用它們的屬性Text。而二者公有的屬性Height,Width,對二者都有效。
4. C# 代碼中引用Style
tblock.Style = (Style)FindResource("Style1");
5. 可以在Style中綁定事件,例如:
<Style TargetType="Button">
<EventSetter Event="Click" Handler="Button_Click"></EventSetter>
</Style>
6. Triggers 放到下一篇再講
