如何使用资源和样式调整控件外观

首先我们看一段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覆盖父类属性.

posted @ 2012-05-17 22:52  ╰→劉じ尛鶴  阅读(307)  评论(0编辑  收藏  举报