在WPF中可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件,Style是作为一种资源被保存下来的。
wpf中的样式分为三种:
1. Implicit Style(默认的样式):默认样式的作用域是整个xaml文件,如果控件没有指定样式,则将会使用该样式。
2.Named Style(命名的样式):该样式具有名称,控件可是设置控件样式Style="{StaticResource 样式名称}"
3.Derived Style(被继承的样式):样式可以通过<新样式名称 BasedOn="{StaticResource 被继承样式名}">来继承
下面的例子来说明三种样式
在上面的例子中所有的style都声明在Window.Resources中,所以它们的作用范围是当前窗体。
Button1使用的是默认的Style:红色的背景色
Button2使用的是命名样式BlueButton:蓝色的背景
Button3使用的是继承自BlueButton样式的新样式RedFont:当鼠标悬停在其上时显示红色的字体,否则显示的是蓝色背景,黄色字体。
Style 中的TargetType是目标类型,当作用对象是TargetType的实例时样式才回发成作用,例如对于上例中的默认样式,当前作用范围的所有没有指定样式的button都会使用该样式。其他类型如ListBox则不会使用该样式。
Style中的Setter是一个设置器,setter对目标类型TargetType的属性(由Setter的Property指定)赋值(由Setter的Value指定)。如上例中默认样式设置button的Background属性为red。
命名样式的名称由x:key设置
最后要说明的就是触发器Trigger,当trigger中的Property和value相等时,触发器就会激活,触发器的setter就会发生作用。如上例中的Style(YellowFont)当鼠标悬停到button上时(由Button.IsMouseOver指示),此时Button.IsMouseOver的值为true与触发器设置的value值相等,所以触发器激活,button的Foreground设置为red;当Button.IsMouseOver为false时触发器的作用取消,Foreground设置为Yellow。