windows phone 7 中怎樣定義和使用資源(Resource)

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"];





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章