Windows Phone 7 定义和使用字典资源(ResourceDictionary)

1、首先需要创建一个资源字典的文件,也就是一个xaml的文件。

文件的语法格式如下

Test.xaml

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:chartingToolkit
="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns:visualizationToolkit
="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit">

<!--定义样式资源-->
<Style x:Key="TextBlockStyle1" TargetType="TextBlock">
<Setter Property="Foreground" Value="Orange"/>
<Setter Property="FontSize" Value="24"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
</Style>

<!--定义数据模板资源-->

<DataTemplate x:Key="cityDetails">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="90" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="Activity: "
Grid.Column
="0"
Grid.Row
="0"
Style
="{StaticResource detailsSmallTitle}" />
<TextBlock Text="{Binding Activity}"
Grid.Column
="1"
Grid.Row
="0"
Style
="{StaticResource detailsSmallText}" />
……

</Grid>
</DataTemplate>

<!--定义控件模板资源-->

<ControlTemplate x:Key="ControlTemplateTest"
TargetType
="chartingToolkit:Chart">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<visualizationToolkit:Title Grid.ColumnSpan="2"
Content
="{TemplateBinding Title}"
Style
="{TemplateBinding TitleStyle}" />
……

</Grid>
</ControlTemplate>
</ResourceDictionary>

Style的x:Key属性是资源字典里面的资源的唯一的标示符,也是作为在其他页面调用的一个唯一的Key来进行调用。

2、调用资源资源中的资源

在MainPage.xaml页面中添加资源字典,语法如下

<phone:PhoneApplicationPage.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Test.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</phone:PhoneApplicationPage.Resources>

ResourceDictionary.MergedDictionaries   获取 ResourceDictionary 字典的集合,这些字典构成了合并字典中的各种资源字典。 

如果想在程序启动时加载所有的资源,可以再App.xaml页面上添加资源的加载,语法如下

<Application
x:Class="DataVisualizationOnWindowsPhone.App"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shell
="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">



<Application.Resources>
<!-- 添加资源 -->
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Test.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

……

</Application>

3、使用字典资源中的资源

在MainPage.xaml页面中的控件调用自定义的资源,语法如下

调用字典资源中x:Key值为TextBlockStyle1的样式资源

<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<TextBlock Text="Some Text" Style="{StaticResource TextBlockStyle1}"/>
</StackPanel>

调用字典资源中x:Key值为cityDetails的数据模板资源

<ContentControl ContentTemplate="{StaticResource cityDetails}"
HorizontalAlignment
="Left"
x:Name
="DetailsControl" Margin="0,0,0,5" />

调用字典资源中x:Key值为ControlTemplateTest的控件模板资源

<charting:Chart x:Name="myChart"
Style
="{StaticResource PhoneChartStyle}"
Template
="{StaticResource ControlTemplateTest}">

……

</charting:Chart>

也可以在cs页面调用字典资源,语法如下

ControlTemplate template;

template
= Application.Current.Resources["ControlTemplateTest"] as ControlTemplate;

myChart.Template
= template;

更多的介绍请参考MSDN的Silverlight资源字典介绍

MSDN的Silverlight资源字典详细介绍

http://msdn.microsoft.com/zh-cn/library/cc903952(v=VS.95).aspx

posted on 2011-03-12 12:47  linzheng  阅读(2068)  评论(2编辑  收藏  举报

导航