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
本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078682