WP7文件部署及资源字典

本文介绍了资源文件的不同部署方式及其访问方法,包括Content、Resource和None三种类型,并详细阐述了如何通过不同类型的URI进行访问。此外,还讲解了资源字典的概念及其实现方式,包括直接资源字典、应用程序资源字典和独立文件资源字典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源文件的部署方式一般有以下几种

方式一:打包在XAP文件包中的独立文件。

方式二:潜入在dll程序集中的文件。

方式三:按需检测的独立文件。

 

具体采用哪种部署方式,实战中应根据资源的性质和实际需求灵活定制。通过资源文件的Build Action属性来设置,资源文件可用的Build Action属性有3个:

Content:当选此值时,资源文件以方式一打包在xap文件中。

Resource:当选此值时,资源文件以方式二嵌入在程序集中。

None:当选此值时,编译器不会对资源文件做任何操作,需开发者自行将其部署为按需文件,即方式三。

 

资源文件的访问

 

对于采取不同部署方式的资源文件,其访问方式也不同。其主要差别体现在用于访问文件的Uri上。在SL中有如下4种:

1)绝对Uri,形如http://www.windowsphone7.com/images/logo.jpg

2)基于应用程序根的相对Uri,以反斜杠开始,形如/Resources/Content.jpg。

3)基于当前XAML文件位置的相对Uri,不以前反斜杠开始,形如Register.xaml、./Register.xaml、Resources/Content.jpg、../Background.png等。

4)基于程序集的相对Uri,以反斜杠开始,用以引用嵌入在程序集中的资源。

其组成形式为/[asseblyShortName]; compone

nt./[resourceLocation],其中[asseblyShortName]代表程序集名称,component为关键字,[resourceLocation]代表资源文件在程序集的相对位置,形如/Demos8;component/Resource/Resource.jpg。

Uri位于System命名空间中,最常见的两个构造方法如下:

public Uri(string  uriString)。

public Uri(string  uriString,UriKind  uriKind)。

其中uriString参数为Uri的字符串表示,uriKind确定Uri的类型是Absolute(绝对)、Relative(相对)、RelativeorAbsolute(不确定)。以上4中方式除了第一个可以使用第一个构造函数取默认值Absolute。他三种必须使用第二个构造函数,且制定UriKind为Relative。

 

1. Content类型资源文件

Content类型的资源文件可以用于基于应用程序根的相对Uri或基于当前XAML文件位置的相对Uri进行访问。

可以采用以下Uri的任意一种:

Resource/Content.jpg。

/Resource/Content.jpg。

./Resource/Content.jpg。

 

2. Resource类型的资源文件

在WP7中,嵌入在其他程序集中的资源文件,只能通过基于程序集的Uri访问;嵌入在本程序集中的资源文件,则可以通过访问当前XAML文件位置的相对Uri进行访问。

举例:在当前项目中可以使用一下方式进行访问:

/hello;component/Resource/1.jpg。

Resource/1.jpg。

 

3. None类型的资源文件

None类型的资源文件为按需文件,可以部署在任意网络位置,一般通过绝对Uri访问。在某种特定的情况下也会使用异步请求的方式进行访问,但仍然需要请求其绝对Uri。

例如部署在域名为www.windowsphone7.com的web站点的/Demos8/Images/None.jgp位置,则可以通过其绝对地址问:http://www.windowsphone7.com/images/logo.jpg

 

资源字典

资源字典是一种资源共享机制,可以在多个地方定义,可以在XAML中或C#中代码中使用,多数在XAML中定义可能多数使用的对象。资源字典最常见的场景有:在XAML中定义数据绑定相关的对象。具体包括样式和模版、画笔、动画对象、转换器、一般对象等。

资源字典是一个键控对象字典,对应System.Windows命名空间下的ResourceDictionary类。SL中的FrameworkElement类和Application类都可以继承资源字典。按照承载对象来分,资源字典相应的分为直接资源字典(FrameworkElement承载),和应用程序资源字典(Application承载)和独立资源文件(由XAML文件承载)3类。

 

1. 直接资源字典

由FrameworkElement.Resource承载的资源字典称为直接资源字典。由于Control类是FreamworkElement类的子孙类,因而几乎页面中所有的控件下都可以定义资源字典。

如下为一个Gril控件下定义的资源字典片段。

 

XAML Code

        <Grid>
            <Grid.Resources>
                <!--资源一-->
                <!--资源二-->
                <!--......-->
            </Grid.Resources>
        </Grid>

 

由此可以知道,Gril.Resource节点世纪对应Gril的Resource属性。其中定义的资源项一般都会有一个x:Name /   x:Key作为标识,然后该Gril中的所有的子孙控件都可以通过此表示引用该资源项,实现该Gril范围内的资源共享。

每一个控件下都可以定义资源字典,但是不推荐使用由于Windows phone 7中的页面是一个ApplicationPage控件,所以通常的做法是,将页面中所有的资源字典都有当前页面控件ApplicationPage来承载

 

2. 应用程序资源字典

对于一些可在多个页面中重复使用的资源,可在Application下定义。具体方法为直接打开App.xaml文件,然后在Application.Resource节点下进行资源定义。

在此处定义的资源,将可以在整个应用程序范围内共享。

 

3. 独立文件资源字典

在某种情况下,也可以将资源字典单独的定义在XAML文件中,然后在需要的地方通过C#代码动态的加载或通过Resource.Dictionary.MergedDictionary属性进行合并。如下代码将两个XAML文件resource1.xaml和resource2.xaml中的资源字典合并到当前页面地资源字典当中。

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值