1. 系統資源。
在wp7開發中可以看到很多使用系統資源(resource)的例子,例如默認的新page:
<TextBlock x:Name="PageTitle" Text="PageTitle" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
這裏的PhoneTextTitle1Style便是資源。
系統的資源定義在這裏:C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Design , 根據安裝路徑不同,這個路徑有一些差異。
這個路徑下有DarkBlue、DarkBrown、LightBlue等文件夾,分別對應手機上選定的主題色+高亮色。
DarkBlue爲例,.\DarkBlue\ThemeResources.xaml 中PhoneTextTitle1Style是這樣定義的:
<Style x:Key="PhoneTextTitle1Style" TargetType="TextBlock" BasedOn="{StaticResource PhoneTextBlockBase}">
<Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiLight}"/>
<Setter Property="FontSize" Value="{StaticResource PhoneFontSizeExtraExtraLarge}"/>
</Style>
PhoneFontFamilySemiLight 和 PhoneFontSizeLarge 的定義<FontFamily x:Key="PhoneFontFamilySemiLight">Segoe WP SemiLight</FontFamily>
<System:Double x:Key="PhoneFontSizeExtraExtraLarge">72</System:Double>
2. 自定義資源
資源可以定義在3個地方:Page.xaml, App.xaml 及單獨的資源辭典文件中。
3個地方定義沒什麼差別,這是使用時存在細微差別。
以頁面中定義爲例子:
<phone:PhoneApplicationPage.Resources>
<Color x:Key="myForce" >Red</Color>
<Color x:Key="myBack" >GreenYellow</Color>
<system:String x:Key="myString" >12345</system:String>
<SolidColorBrush x:Key="myForceBrush" Color="Orange" />
<SolidColorBrush x:Key="myBackBrush" Color="{StaticResource myBack}" />
</phone:PhoneApplicationPage.Resources>
system是命名空間,要使用它需要在前面加上一行
xmlns:system="clr-namespace:System;assembly=mscorlib"
3. Xaml中使用資源
<TextBlock x:Name="ApplicationTitle" Text="{StaticResource myString}" Foreground="{StaticResource myForceBrush}" Style="{StaticResource PhoneTextNormalStyle}"/>
4. MainPage.Xaml.cs文件中使用資源
if (this.ApplicationBar == null)
{
this.ApplicationBar = new ApplicationBar();
this.ApplicationBar.MenuItems.Add(new ApplicationBarMenuItem() { Text = "Menu1" });
}
this.ApplicationBar.BackgroundColor = (Color)this.Resources["myBack"];
this.ApplicationBar.ForegroundColor = (Color)Application.Current.Resources["PhoneAccentColor"];
其實"PhoneAccentColor"可以通過this.Resources
加載到,但反之不行,因爲資源"myBack"是定義在Page中的,Application類中不可見
this.ApplicationBar.ForegroundColor = (Color)this.Resources["PhoneAccentColor"];