我的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,则它的有效范围是整个程序
<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,则它的有效范围是当前窗体
<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,则它的有效范围就是这个控件
<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
<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:
<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 放到下一篇再讲