资源的定义与使用
资源与资源字典
Windows Phone 7通过ResourceDictionary类提供了提供了资源字典的概念。资源字典是一个按键索引的对象字典。可以在XAML中后台代码中使用。资源字典可以存在于应用程序结构中的多个位置,包括直接资源、应用程序资源(App.xaml)或作为XAML中独立存在。使用资源字典要明确哪些对象应该放在资源字典里。其实,真正需要共享的就可以放在资源字典中。
Silverlight ResourceDictionary 共享行为支持以下对象类别的可共享用法:
• 样式和模板。
• 画笔和颜色。
• 包括演示图板的动画类型。
• 转换。
• Matrix、Matrix3D 和 Point 结构值。
• 某些具有可设置和可构造属性(例如 Thickness 和 CornerRadius)的其他结构。
• 支持代码中定义自定义类型,然后在 XAML 中实例化做为资源。 这样的例子针对资源、数据源的 CLR 对象、或实现 IValueConverter 数据绑定的转换器。
• 字符串和基本数值,如 double 和 int。
设置资源设置时,可以设置一个整体的,也可以设置一个部分的。比如,我们可以设置一个样式资源<style>,这里可以包括Margin、Height等一系列的属性设置,我们也可以设置其中某一个属性,比如Margin属性的设置需要的类型是Thickness,我们可以设置一个<Thickness>的资源来表示Margin的属性。当然,有时候会出现这样的情况,比如说在布局设计的时候,规定了一个控件的宽和高,在引用资源的时候资源设置中也规定了控件的宽和高,这个时候,会以我们设置的宽和高为主,也就是前者。
创建并使用资源的四种方式
方式一:创建并使用全局资源
找到全局文件App.xaml,在App.xaml中存在标签<Application.Resources>,这里就是定义资源的地方。
在App.xaml中的<Application.Resources>我们可以定义需要使用的资源,但是每一个资源必须制定属性“x:key”来唯一标识此资源。当然,放在App.xaml中的资源可以被应用程序中的各个部分使用,如不同页面,不同后台代码。
在前台代码中,我们可以使用StaticResource扩展标记,直接引用已定义的资源,在后台时,我们需要使用形如“Application.Current.Resources["greenStyle"] as Style”的方式来使用资源。如定义如下资源:
<!--应用程序资源-->
<Application.Resources>
<!--定义TextBlock的资源样式,分别为红色、20字体,绿色、40字体-->
<Style x:Key="redStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="Red" />
<Setter Property="FontSize" Value="20" />
</Style>
<Style x:Key="greenStyle" TargetType="TextBlock">
<Setter Property="Foreground" Value="Green" />
<Setter Property="FontSize" Value="40" />
</Style>
<!--定义字符串资源-->
<sys:String x:Key="myName">sky</sys:String>
</Application.Resources>
注意:在定义String等字符串或值的资源时,需要引入命名空间 xmlns:sys="clr-namespace:System;assembly=mscorlib",否则不能使用。
我们在前台代码中,写一个TextBlock来显示资源myName,使用Button来在后台更改TextBlock的Style属性。如:
<!--ContentPanel - 在此处放置其他内容-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Height="56" HorizontalAlignment="Left" Margin="76,68,0,0"
Name="myInfo"
Text="TextBlock" VerticalAlignment="Top" Width="320"
Style="{StaticResource redStyle}"/>
<Button Content="点击显示信息"
Height="72"
HorizontalAlignment="Left"
Name="btnShowInfo"
VerticalAlignment="Top"
Width="259"
Margin="76,195,0,0"
Click="btnShowInfo_Click"
/>
</Grid>
后台代码为:
private void btnShowInfo_Click(object sender, RoutedEventArgs e)
{
this.myInfo.Text =Application.Current.Resources["myName"] as String;
if (this.myInfo.Style == (Application.Current.Resources["redStyle"] as Style))
{
this.myInfo.Style = Application.Current.Resources["greenStyle"] as Style;
}
else
{
this.myInfo.Style = Application.Current.Resources["redStyle"] as Style;
}
}
这样,我们可以得到这样的效果:当页面加载时,TextBlock的值是“TextBlock”,Style属性是红色、20字体,当点击的时候,Textblock的值为“sky”,它的Style的属性会在红色、20字体与绿色、40字体间切换。
方式二:创建并使用局限于本页面的资源
我们可以将资源的定义不写在App.xaml中,而是在某一个页面中添加一个<phone:PhoneApplicationPage.Resources>标签,在这个页面中使用这里定义的资源。如,我们可以再页面中定义这样的资源:指定Button的Margin布局为“76,195”,背景色为蓝色。
<phone:PhoneApplicationPage.Resources>
<Thickness x:Key="myMargin">
7
补充:移动开发 , Windows Phone ,