65.9K
CodeProject 正在变化。 阅读更多。
Home

Silverlight 中的资源 - 第 1 部分(资源文件)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.22/5 (9投票s)

2011年5月19日

CPOL

5分钟阅读

viewsIcon

43925

downloadIcon

363

Silverlight 中的资源:简要概述

引言

资源对于 Web 应用程序来说一直至关重要,在 Silverlight 应用程序中也是如此,它在创建富 Internet 应用程序方面发挥着重要作用。在此上下文中,资源意味着可以用于创建富应用程序的图像、音频、视频、对象,如样式或数据模板。Silverlight 支持多种存储和管理资源的方式。在这篇文章中,我们将探讨可用的不同选项。

关于资源的完整信息将跨越多篇文章,我们将涵盖二进制资源(资源文件)和 XAML 资源。

管理资源的各种方式

在 Silverlight 中,资源可以通过以下方式进行管理:

  • 服务器端资源,按需加载
  • 嵌入在 XAP/程序集中的资源
  • 来自外部程序集的资源

最重要的一点是,我们不应混淆程序集资源和 XAML 资源,尽管两者都被称为资源。我们可以将资源类型分为两类:

  • 除可执行文件或二进制/程序集资源以外的文件(通过资源文件管理)
  • 如样式、模板等对象,或 XAML 资源(通过资源字典管理)

基本上,本文的重点是为您简要介绍资源文件、二进制资源或程序集资源。在这篇文章中,我们将探讨这些资源文件如何从 Silverlight 中存储和管理。后续文章将重点介绍资源字典或 XAML 资源。

管理资源文件

在开始介绍资源文件之前,让我们快速回顾一下我们将经常遇到的几个重要术语。

应用程序包 – 打包为 XAP 文件的文件,其中包括 Silverlight 程序集和应用程序清单文件,以及任何资源。

应用程序根目录 – XAP 文件在部署解决方案中的位置,通常是 ClientBin 文件夹。

URI - 代表统一资源标识符,是资源的路径。它可以是:

绝对 URI 相对 URI

资源的精确位置,例如,一个限定的 URL (www.manaspatnaik.com/image1.jpg)

相对于应用程序根目录(应用程序包所在位置)的文件位置。例如:“/image1.jpg
当文件位于应用程序根目录之外时使用 在应用程序根目录下的域内存储资源的常见场景
文件必须位于与包相同的应用程序根目录文件夹内。

应用程序根目录是应用程序包 XAP 文件所在的文件夹。因此,所有文件都必须与 XAP 文件位于同一文件夹内。相对 URI 不会查找此文件夹之外的内容,但它支持应用程序根目录内的文件夹结构。因此,我们可以在应用程序根目录下的 Resource 文件夹内放置文件 image1.jpg

除了 Uri,每个文件还有一个 BuildAction(Build Action)属性,我们将在下面的示例中逐步探索。

资源文件

众所周知,Silverlight 应用程序不过是一系列压缩并存储为单个文件的集合。添加到 Silverlight 项目内部客户端的任何资源都会根据部署模式传输到客户端。让我们通过以下示例进行检查:

SNAGHTML1186ae8

部署模式,BuildAction(Build Action)

这里最需要注意的是资源的部署配置方式。默认情况下,文件的 BuildAction 属性设置为 Resource。Silverlight 提供了多种选项,有时会派上用场。

image

通常,资源可以根据以下 BuildAction(Build Action)选项进行部署:

  • Content
  • Resource

对于每种选项,应用程序包和 URI 都会有所不同。另外请注意,在 Silverlight 项目中,虽然有多种选项,但只能使用上述BuildAction(Build Action)。

Content

Content 选项会将文件作为松散资源添加到应用程序包中。

image

在这里,在项目中,将文件 BuildAction(Build Action)更改为 Content 并重新生成解决方案。XAP 文件大小约为 42 KB,其中包含图像。

image

SNAGHTML13e0aee

要定位资源文件,可以遵循上述方法之一。

XAML
<Grid x:Name="LayoutRoot" Background="White">
<Image Margin="12,12,12,77" Name="image1" Stretch="Fill" Source="/BananaTECH.jpg" />
</Grid>
代码
image1.Source = new BitmapImage(new Uri("/BananaTECH.jpg",UriKind.Relative));

Resource

此选项会将资源添加到应用程序包内的 Silverlight 程序集中。

在更改图像的 BuildAction 类型后重新生成项目,XAP 文件大小保持在 43 KB 不变,但图像已嵌入到 MySilverlightApp.dll 中。您可以比较与上述 Content 类型相比的程序集大小差异。

SNAGHTML157f83a

要定位资源,**不应该有任何前导路径**。

XAML
<Grid x:Name="LayoutRoot" Background="White">
<Image Margin="12,12,12,77" Name="image1" Stretch="Fill" Source="BananaTECH.jpg" />
</Grid>
代码
image1.Source = new BitmapImage(new Uri("BananaTECH.jpg", UriKind.Relative));

此选项既不将资源添加到应用程序包,也不添加到 Silverlight 程序集。您需要手动将资源添加到服务器。

使用 None BuildAction 时,XAP 文件大小急剧减小,因为资源没有嵌入到包或程序集中。下面的屏幕截图显示了大小为 4 KB 的 XAP 文件。为了使您的已部署代码正常工作,我们需要将资源文件放置在已发布的项目下的 clientbin 文件夹中。

XAML
<Grid x:Name="LayoutRoot" Background="White">    
<Image Margin="12,12,12,77" Name="image1" Stretch="Fill" 
    Source="BananaTECH.jpg" /></Grid>
代码
image1.Source = new BitmapImage(new Uri("BananaTECH.jpg", UriKind.Relative));

来自外部程序集的资源

将资源重构到单独的程序集中以供应用程序之间重用是明智的。外部程序集资源的最佳示例是主题库。Silverlight 也支持在项目中使用的外部 Silverlight 程序集。让我们创建一个 Silverlight 程序集项目。

image

然后添加对 Silverlight 项目的引用将允许您在应用程序中使用资源文件。

可以使用以下语法来使用资源:

/assemblyName;component/resourceLocation

例如,在此项目中,可以从 MyResources 程序集中使用 URI “/MyResources;component/Rupees.jpg” 来获取图像文件。这里的 component 是关键字。

<Grid x:Name="LayoutRoot" Background="White">    
<Image Margin="12,12,12,77" Name="image1" Stretch="Fill" 
    Source="/MyResources;component/Rupees.jpg" /></Grid>

结论

希望这篇文章能让您对资源文件有一个清晰的认识。资源的主题尚未完成,这里我们只讨论了文件/二进制资源,但还有很多内容需要讨论和分享。在接下来的文章中,我将尝试涵盖更多关于此主题的内容。请发送您的建议和疑问。

历史

  • 2011 年 5 月 19 日:初稿
© . All rights reserved.