在XAML中,样式、模板、画笔和动画等都被看做是资源,它们最终的作用都是相同的,就是让设计人员可以使用这些资源创建更好的视觉效果,对其设计的产品外观进行标准化统一,那么如何使用这些资源并组织和重用呢,本节就来讲解样式、模板、画笔和动画的概念,以及它们的使用方法。
3.3.1 样式
在开发应用程序过程中,添加一个控件时可以通过设置控件的属性来控制它的显示外观。例如,对于TextBox文本框,可以通过设置字体属性得到不同的文本显示效果,这些属性包括FontFamily(字体类型)、FontSize(字体大小)、FontStyle(字形)和Foreground(字体颜色)等。尽管设计人员可以对应用程序的外观逐个进行大量的自定义操作,但他们还是需要一个功能强大的样式设置,以便在应用程序内部和应用程序之间共享和维护外观。
1.样式的定义及引用
在XAML中,任何派生自FrameworkElement或FrameworkContentElement的元素下都可以定义样式。通常情况是将样式作为资源定义在元素的Resources属性元素下,语法格式如下所示:
<object.Resources>
<Style TargetType="ControlTypeName" x:Key="StyleKey">
<Setter Property="AttributeName" Value="AttributeValue">
</Setter>
...
</Style>
</object.Resources>
在上述语法格式中:
- TargetType属性,用于指定要设置样式的控件类型,属性值是派生自FrameworkElement或FrameworkContentElement的类型,如果试图将样式应用到与TargetType属性值不匹配的控件,就会发生异常。
- x:Key属性,用来设置样式的键,以便通过这个键来引用该样式。
- Setter元素用来设置控件的属性,一个Style可以有多个Setter,每个Setter元素都需要一个Property字段和一个Value字段,这两个字段分别表示控件的属性和为该属性设置的值。其中,设置Value字段的方式可以参考3.2.3节中介绍的属性设置方法,这里就不具体介绍了。
<Style TargetType="Button" x:Key="ButtonStyle">
<Setter Property="FontFamily" Value="楷体"/>
<Setter Property="FontStyle" Value="Italic"/>
<Setter Property="FontSize" Value="10"/>
在前面章节中提到,资源的定义位置不同,其有效使用范围也会不同,当把样式定义为资源时,它同样遵循这样的规则。在XAML应用程序中,样式作为资源时的作用范围包括如下情况:
<Button Content="按钮" Width="100" Height="40">
<Setter Property="Foreground" Value="Red"/>
样式被定义成资源后,像其他资源一样,可以根据样式资源的键使用StaticResource标记扩展来引用相应的样式,然后赋值给元素的Style属性,语法格式如下所示:
<object Style="{StaticResource StyleKey}" ...> ... </object>