XAML实例教程系列 - 资源(Resources)

XAML实例教程系列 - 资源(Resources)

2012-08-10 12:47 by jv9, 1386 阅读, 1 评论, 收藏编辑

在Windows 8 Metro应用开发中,XAML主要用于应用界面设计,无论是开发人员还是设计人员经常会设计自定义用户界面或者控件行为,其中会涉及到不同方面的代码设计,例如控件模板,控件样式,动画设计等。为了方便设计,管理和重复利用这些通用代码,XAML提出了资源(Resources)的概念。本篇将介绍 XAML资源(Resource)。

 

XAML资源(Resources)概念 

 

资源(Resources),其概念和传统Web应用中的Cascading Style Sheets(CSS)样式表类似,其目的为了实现对象的重复调用。在Windows 8 Metro应用开发中,资源的概念不仅仅局限于对控件样式的定义,而且还包括对控件模板的定义,对字体的控制等。在实际项目中,开发人员可以在资源中设置多种不同控件属性,在多个页面调用通用资源代码, 这样不仅有助于代码重利用,同时有助于应用维护的一致性。

 

XAML中定义资源的语法格式如下:

 

 

<根元素对象.Resources>
     <资源定义 />
</根元素对象.Resources>
 

 

 

在Windows 8 Metro应用开发中,每个Framework对象都支持Resources属性,也就是说,可以在不同控件或者页面定义特定的Resources, 例如,在Grid, Button定义Resources,

    

复制代码
< Grid >
         < Grid.Resources >
            < LinearGradientBrush  x:Key ="bgBrush"  StartPoint ="0.5,0"  EndPoint ="0.5,1" >
                 < GradientStop  Color ="Yellow"  Offset ="0.0"   />
                 < GradientStop  Color ="Blue"  Offset ="0.75"   />
                 < GradientStop  Color ="Green"  Offset ="1.0"   />
            </ LinearGradientBrush >
         </ Grid.Resources >
 
         < Button >
             < Button.Resources >
                 ....
             </ Button.Resources >
         </ Button >

</ Grid >
复制代码

 

XAML资源字典(ResourceDictionary) 

 

XAML资源的概念在一定程度上简化了XAML页面代码,对于管理批量资源代码集合,XAML还提供<ResourceDictionary>资源字典标记进行声明。

在Windows 8 Metro应用开发中,所有能够被定义在资源字典(ResourceDictionary)的对象必须是可被共享使用的。可以被应用于资源字典的对象如下(来自MSDN):

1. Style and Template

2. Brushes and Colors

3. Animation types (Storyboard)

4. Transforms

5. Matrix and Maxtrix3D 

6. Point 

7. Thickness and CornerRadius

8. XAML intrinsic data types

 

XAML资源字典(ResourceDictionary)的定义

  

在资源字典(ResourceDictionary)中,每一个资源项必须定义x:Key,也就是所谓的唯一标识的资源名称,这样可以方便读取访问。例如以下代码,在Grid.Resources中定义资源x:Key = "bgBrush", 我们可以在Button中调用资源x:Key,应用资源到控件。

 

方法一: 在XAML中定义资源字典(ResourceDictionary),

复制代码
< Grid  x:Name ="LayoutRoot" >
         < Grid.Resources >
             < ResourceDictionary >
                 < LinearGradientBrush  x:Key ="bgBrush"  StartPoint ="0.5,0"  EndPoint ="0.5,1" >
                 < GradientStop  Color ="Yellow"  Offset ="0.0"   />
                 < GradientStop  Color ="Blue"  Offset ="0.75"   />
                 < GradientStop  Color ="Green"  Offset ="1.0"   />
             </ LinearGradientBrush >
             </ ResourceDictionary >   
         </ Grid.Resources >
         < Button  x:Name ="btnSubmit"  Background =" {StaticResource bgBrush} "
   Height ="60"  Width ="120"  Margin ="112,23,168,217" />
</ Grid > 
复制代码

 

 

 

方法二: 在后台代码中定义资源字典(ResourceDictionary),


复制代码
ResourceDictionary dict =  new ResourceDictionary();
            LinearGradientBrush bgBrush =  new LinearGradientBrush();
            bgBrush.StartPoint =  new Point( 0.5,  0);
            bgBrush.EndPoint =  new Point( 0.5,  1);
            GradientStopCollection stops =  new GradientStopCollection();
            GradientStop stop1 =  new GradientStop();
            stop1.Color = Colors.Yellow;
            stop1.Offset =  0.0;
            stops.Add(stop1);
            GradientStop stop2 =  new GradientStop();
            stop2.Color = Colors.Blue;
            stop2.Offset =  0.75;
            stops.Add(stop2);
            GradientStop stop3 =  new GradientStop();
            stop3.Color = Colors.Green;
            stop3.Offset =  1.0;
            stops.Add(stop3);
            bgBrush.GradientStops = stops;
            dict.Add( " bgBrush ", bgBrush);
             this.LayoutRoot.Resources = dict;
             this.btnSubmit.Background = (LinearGradientBrush) this.LayoutRoot.Resources[ " bgBrush "]; 
复制代码

 

完成后台代码定义后,应用运行时,将自动应用资源到对象,

< Grid  x:Name ="LayoutRoot"  Background =" {StaticResource ApplicationPageBackgroundThemeBrush} " >
         < Button  x:Name ="btnSubmit"  Height ="60"  Width ="120"  Margin ="112,23,168,217" /> </ Grid > 

 

XAML资源字典(ResourceDictionary)的分类 

 

在WPF开发中,XAML资源可被分为静态资源(StaticResource)和动态资源(DynamicResource)两类,但是在Windows 8 Metro应用开发中,XAML仅支持静态资源(StaticResource)。

根据资源应用域的不同,XAML资源也可被分为FrameworkElement.Resources和Application.Resources。  

 

FrameworkElement.Resources是将资源对象应用于同一个对象树的不同对象上,也可被称为即时资源(Immediate Resources), 或者称为页面资源(Page Resources)。通常来说,FrameworkElement.Resources会被定义在XAML页面根元素上。

 

Application.Resources可以被认为是贯串整个应用级别的资源,资源被定义在Application.Resources中,相比 FrameworkElement.Resources而言,Application.Resources应用范围较广,其生命周期也比 FrameworkElement.Resources要长。通常来说,Application.Resources会被定已在App.Xaml页面。例如,在创建Metro应用时, Visual Studio 2012将自动生成App.Xaml页面,其代码如下:


 

     < Application.Resources >
         < ResourceDictionary >
             < ResourceDictionary.MergedDictionaries >
                 <!--  
                    Styles that define common aspects of the platform look and feel
                    Required by Visual Studio project and item templates
                  -->
                 < ResourceDictionary  Source ="Common/StandardStyles.xaml" />
             </ ResourceDictionary.MergedDictionaries >
         </ ResourceDictionary >  </ Application.Resources >

 

XAML资源(Resources)引用方法

在”XAML实例教程系列 - 标记扩展(Markup Extensions) "中,曾经介绍过StaticResource(静态资源)的引用, 这里不在赘述。

需要留意的是,资源作用域是“就近原则”,如果在对象内部定义相关资源,对象会自动忽略Application.Resource,应用“最近”的资源。 

 

XAML合并资源字典属性(ResourceDictionary.MergedDictionaries) 

为了方便调用外部资源文件,资源字典(ResourceDictionary)提供了MergedDictionaries属性。 通常来说,合并资源字典属性会被定义在Application.Resources, 也就是在App.xaml文件中。

在使用合并资源字典属性时,需要注意资源的查找顺序;

 

在ResourceDictionary.MergedDictionaries中定义多个外部资源文件,其查找资源顺序时由下往上逆行查找的。例如:

< Application.Resources >
     < ResourceDictionary >
       < SolidColorBrush  Color ="#d0157820"  x:Key ="muddyBrush" />
       < ResourceDictionary.MergedDictionaries >
         < ResourceDictionary  Source ="rd1.xaml"  />
         < ResourceDictionary  Source ="rd2.xaml"  />
       </ ResourceDictionary.MergedDictionaries >
     </ ResourceDictionary > </ Application.Resources > 

在ResourceDictionary.MergedDictionaries中定义两个资源字典源,rd1.xaml和rd2.xaml。 如果在两个资源文件中存在相同x:key的资源,rd2.xaml中的资源将被优先采用。 

 

作为外部资源合并,应用本身定义的资源永远具有较高的优先级,也就是说,如果在本地资源定义中,出现与rd1.xaml,rd2.xaml同名的资源, 本地资源都被会优先采用。

 

主题资源字典属性(ResourceDictionary.ThemeDictionaries)

在Windows 8 Metro应用开发中,主题资源字典(ThemeDictionaries)是一个特殊的合并资源字典。其目的是为应用提供多主题支持,提高用户体验性。创建默认Windows 8 Metro应用时,Visual Studio 2012将自动生成主题资源代码,例如:

 <ResourceDictionary.ThemeDictionaries>

         < ResourceDictionary  x:Key ="Default" >
             < x:String  x:Key ="BackButtonGlyph"></ x:String >
             < x:String  x:Key ="BackButtonSnappedGlyph" > </ x:String >
         </ ResourceDictionary >

         < ResourceDictionary  x:Key ="HighContrast" >
             < x:String  x:Key ="BackButtonGlyph"></ x:String >
             < x:String  x:Key ="BackButtonSnappedGlyph"></ x:String >
         </ ResourceDictionary > 

        <ResourceDictionary x:Key="GreenTheme">
            <SolidColorBrush x:Key="MyBackgroundBrush" Color="Green"></SolidColorBrush>
        </ResourceDictionary>

        <ResourceDictionary x:Key="BlackTheme">
             <SolidColorBrush x:Key="MyBackgroundBrush" Color="Black"></SolidColorBrush>
        </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

 

与MergedDictionaries属性相比较,在使用ThemeDictionaries时,需要为每个资源定义一个x:Key.例如上面的代码中的Default, HighContrast.


 

Windows 8 Metro应用提供默认主题资源,该文件保存在 \(Program Files)\windows kits\8.0\Include\winrt\xaml\design 目录,

 


 

 
 

对于主题资源字典(ThemeDictionaries)的应用,将在随后的Windows 8 Metro应用开发实例中详细介绍。
 

 


 

XAML实例教程系列到这里已经全部结束,这个系列主要是为正在或者将要学习Windows 8 Metro应用开发的新手提供XAML学习帮助,如果你在阅读中遇到问题,欢迎留言或者邮件讨论。
 

 

 

本篇源代码下载

(Windows 8  RP & VS2012 RC)

 

 


 

 

 

欢迎大家留言交流,或者加入QQ群交流学习:

22308706(一群) 超级群500人 
37891947(二群) 超级群500人 
100844510(三群) 高级群200人 
32679922(四群) 超级群500人 
23413513(五群) 高级群200人 
32679955(六群) 超级群500人 
88585140(八群) 超级群500人 
128043302(九群 企业应用开发推荐群) 高级群200人 
101364438(十群) 超级群500人 

68435160(十一群 企业应用开发推荐群)超级群500人

 
 
分类:  SilverlightWindows 8
标签:  Silverlight教程xamlwindows8WinRT

转载于:https://www.cnblogs.com/meimao5211/p/3348956.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值