且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-10-03 14:02:22

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

文件的语法格式如下

Test.xaml

 


  1. <ResourceDictionary 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  4.  
  5.     xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" 
  6.     xmlns:visualizationToolkit="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"> 
  7.  
  8. <!--定义样式资源--> 
  9.  <Style x:Key="TextBlockStyle1" TargetType="TextBlock"> 
  10.   <Setter Property="Foreground" Value="Orange"/> 
  11.   <Setter  Property="FontSize" Value="24"/> 
  12.   <Setter  Property="VerticalAlignment" Value="Bottom"/> 
  13.  </Style> 
  14.  
  15. <!--定义数据模板资源--> 
  16.  
  17. <DataTemplate x:Key="cityDetails"> 
  18.   <Grid> 
  19.    <Grid.ColumnDefinitions> 
  20.     <ColumnDefinition Width="Auto" /> 
  21.     <ColumnDefinition Width="90" /> 
  22.    </Grid.ColumnDefinitions> 
  23.    <Grid.RowDefinitions> 
  24.     <RowDefinition /> 
  25.     <RowDefinition /> 
  26.    </Grid.RowDefinitions> 
  27.    <TextBlock Text="Activity: " 
  28.     Grid.Column="0" 
  29.     Grid.Row="0" 
  30.     Style="{StaticResource detailsSmallTitle}" /> 
  31.    <TextBlock Text="{Binding Activity}" 
  32.     Grid.Column="1" 
  33.     Grid.Row="0" 
  34.     Style="{StaticResource detailsSmallText}" /> 
  35.    ……  
  36.  
  37.   </Grid> 
  38.  </DataTemplate> 
  39.  
  40. <!--定义控件模板资源--> 
  41.  
  42.  <ControlTemplate x:Key="ControlTemplateTest" 
  43.                      TargetType="chartingToolkit:Chart"> 
  44.         <Grid> 
  45.             <Grid.ColumnDefinitions> 
  46.                 <ColumnDefinition Width="*" /> 
  47.                 <ColumnDefinition Width="Auto" /> 
  48.             </Grid.ColumnDefinitions> 
  49.             <Grid.RowDefinitions> 
  50.                 <RowDefinition Height="Auto" /> 
  51.                 <RowDefinition Height="*" /> 
  52.             </Grid.RowDefinitions> 
  53.             <visualizationToolkit:Title Grid.ColumnSpan="2" 
  54.                                         Content="{TemplateBinding Title}" 
  55.                                         Style="{TemplateBinding TitleStyle}" /> 
  56.                   ……  
  57.  
  58.         </Grid> 
  59.     </ControlTemplate> 
  60. </ResourceDictionary> 

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

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

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

 


  1. <phone:PhoneApplicationPage.Resources> 
  2.   <ResourceDictionary> 
  3.    <ResourceDictionary.MergedDictionaries> 
  4.     <ResourceDictionary Source="Test.xaml"/> 
  5.    </ResourceDictionary.MergedDictionaries> 
  6.   </ResourceDictionary> 
  7.  </phone:PhoneApplicationPage.Resources> 

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

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

 


  1. <Application 
  2.     x:Class="DataVisualizationOnWindowsPhone.App" 
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  5.     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"> 
  6.  
  7.  
  8.  
  9.     <Application.Resources> 
  10.         <!-- 添加资源 --> 
  11.         <ResourceDictionary> 
  12.             <ResourceDictionary.MergedDictionaries> 
  13.                 <ResourceDictionary Source="Test.xaml"/> 
  14.             </ResourceDictionary.MergedDictionaries> 
  15.         </ResourceDictionary> 
  16.     </Application.Resources> 
  17.  
  18. ……  
  19.  
  20. </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的控件模板资源

 


  1. <charting:Chart x:Name="myChart" 
  2.                                     Style="{StaticResource PhoneChartStyle}" 
  3.                                     Template="{StaticResource ControlTemplateTest}"> 
  4.  
  5. ……  
  6.  
  7. </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