首先我们看一段xaml代码
1 <TextBlock x:Name="ApplicationTitle" Text="BlendPro" Style="{StaticResource PhoneTextNormalStyle}"/>
在这里你可能注意带花括号设置了TextBlock的Style属性.这就意味着表达式在运行时进行了计算,属性被设置为计算后的值.本段xaml使用名为PhoneTextNormalStyle的StaticResource来设置Style属性.
而加载XAML时, StaticResource的解析是通过沿XAML树查找所有资源字典中的资源来完成的.如果在当前页面的任何位置都找不到时,则会查找位于App.xaml文件中的应用程序范围的资源字典.
资源字典仅是一个对象的集合,在应用程序中可以重复使用.在下面的代码片段中,可以看到两个在应用程序范围资源字典中定义资源:Color以及SolidColorBrush.每个XAML元素的x:key特性都声明了一个从代码中访问资源时所需的键.你还会注意到SolidColorBrush资源时间上引用了Color资源.这时资源的顺序很重要.如果先定义SolidColorBrush资源,当解析器定位时就会抛出一个未找到资源的异常.
1 <phone:PhoneApplicationPage.Resources> 2 <Color x:Key="ButtonBackColor"> 3 #FFFF5C5C 4 </Color> 5 <SolidColorBrush x:Key="ButtonBackBrush" Color="{StaticResource ButtonBackColor}"/> 6 </phone:PhoneApplicationPage.Resources>
接着我们在来看一段XAML片段
1 <phone:PhoneApplicationPage.Resources> 2 <Style x:Key="MyBaseStyle" TargetType="TextBlock"> 3 <Setter Property="Foreground" Value="{StaticResource PhoneFontFamilySemiLight}"/> 4 <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeLarge}"/> 5 </Style> 6 <Style x:Key="MyTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource MyBaseStyle}"> 7 <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 8 </Style> 9 </phone:PhoneApplicationPage.Resources>
你会注意到其中定义了一个TargetType特性,它用来确定可以应用该Style的控件类型.在本片段中被定义为应用所有TextBlock控件. Style还可以继承其他的Style.上面片段中使用BasedOn属性继承了名为MyBaseStyle的Style,得到MyBaseStyle中Foreground和FontSize并使用自己定义的Foreground覆盖父类属性.