专栏首页小狼的世界Silverlight学习笔记:资源的位置

Silverlight学习笔记:资源的位置

    在 Web 项目中,我们免不了使用一些诸如图片、音频、视频、字体之类的在我们的程序中非可执行的数据文件,习惯称之为资源文件。在Silverlight中,使用这些资源文件的方法有很多,比如官方的说法:

  • 作为应用程序包中的单个文件。
  • 作为按需检索的单个文件。
  • 作为嵌入应用程序包的程序集中的文件。
  • 作为嵌入外部库包的程序集中的文件。
  • 作为程序集中嵌入的按需检索的文件。

    对于这个说法,我觉得很晦涩,所以亲自实践了一下。对于 Silverlight 来说,我们可以将资源发布到 xap 的包中,也可以部署到其所在的网站,控制这个的一个重要的选项就是我们在 Build 工程时的一个 build action 属性。

下面讨论三种在工程中引用资源的方法:资源 Resource、内容 content 和 none。

 1、默认情况下 mainPage.xaml 的 Build action 是 Page,而加入的资源文件则是 Resource。这样,我们加入到 应用的根目录下的图片可以这样引用。

<UserControl x:Class="_009_uri.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
  <Grid x:Name="LayoutRoot">
        <Image Source="./blend.jpg"></Image>
  </Grid>
</UserControl>

 编译后,可以看到图片。

资源(Resource):这个build action选项会将文件嵌入项目的程序集中。这个选项意味着,如果你添加了一个视频,那么你生成的xap会比你想象中的要大一些。

2、 按照内容的方式进行 build。我们先看一下代码:

<UserControl x:Class="_009_uri.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
  <Grid x:Name="LayoutRoot">
        <Image Source="./blend.jpg" Width="250" Margin="0,0,300,0"></Image>
        <MediaElement Source="./old6.mp4" Margin="250,50,0,0" Width="200"></MediaElement>
  </Grid>
</UserControl>

 虽然引用的方式没有变化,但是此时我们必须将 jpg 和 mp4 文件放到网站的 ClientBin 或者其他和我们的应用同级的目录中,才能够正常的访问,而此时,我们生成的 xap 又变成了一个小巧的文件包。

如果我们不适用相对的路径,仍然可以用绝对的路径来访问我们的应用。

<UserControl x:Class="_009_uri.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
  <Grid x:Name="LayoutRoot">
        <Image Source="./blend.jpg" Width="250" Margin="0,0,300,0"></Image>
        <MediaElement Source="http://localhost:7323/009_uri.Web/ClientBin/old6.mp4" Margin="250,50,0,0" Width="200"></MediaElement>
  </Grid>
</UserControl>

 我认为,这种方法使我们日常项目中经常用到的。

另外,如果我们使用前导斜杠(/)的相对URI,则表示我们要基于应用程序跟的位置来寻找资源。

<UserControl x:Class="_009_uri.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
  <Grid x:Name="LayoutRoot">
        <Image Source="./blend.jpg" Width="250" Margin="0,0,300,0"></Image>
        <MediaElement Source="/../Assets/old6.mp4" Margin="250,50,0,0" Width="200"></MediaElement>
  </Grid>
</UserControl>

3、build action 为 none的时候,我们可以按照2的方式来进行引用。

参考资料:

1、资源文件

2、 Demystify URI Reference for app resources

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Pandas删除数据的几种情况

    参考资料: 1、Dropping Rows And Columns In pandas Dataframe 2、pandas过滤包含特定字符串的行 3、P...

    大江小浪
  • [每天五分钟,备战架构师-11]数据库系统

    数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的,但又是潜在有用的信息和知识的过程。

    大江小浪
  • Kubernetes基础:Service

    我们通过Pod、Deployment等可以将应用发布到Kubernetes平台中,但是如果我们如何才能访问我们部署的应用呢?有一个办法就是通过节点的IP加上节点...

    大江小浪
  • 深度挖掘 Laravel 生命周期

    这篇文章我们来聊聊 「Laravel 生命周期」 这个主题。虽然网络上已经有很多关于这个主题的探讨,但这个主题依然值得我们去研究和学习。

    柳公子
  • 发自肺腑深入肌肤 —— 一位武汉老程序员的自白

    作者:李明诚 链接:https://www.zhihu.com/question/61624754/answer/189865710 来源:知乎

    老钱
  • CSS世界(异步图书)

    本书从前端开发人员的需求出发,以“流”为线索,从结构、内容到美化装饰等方面,全面且深入地讲解前端开发人员必须了解和掌握的大量的CSS知识点。同时,作者结合多年的...

    用户3157710
  • Docker的网络(三)

    从Linux的network namespace开始,通过详细讲解Docker的内置网络host和bridge是怎么使用的,来给大家展示不同容器之间网络的隔离和...

    蒋老湿
  • Spring Boot 2.2.2 发布,新增 2 个新特性!

    什么是构造器参数绑定?看下栈长之前写的这篇文章:Spring Boot 构造器参数绑定,越来越强大了!

    Java技术栈
  • SpringBoot 整合NoSql

    添加Spring-Web和Spring-Security依赖,使用Spring-Security是因为使用SpringBoot的Redis依赖时,必须添加Spr...

    Johnson木木
  • 软件正在吃掉世界,而容器正在吃掉整个软件世界

    不管你是否意识到,在过去的几年时间里,以Docker、Kubernetes为代表的容器技术已经悄然发展成为一项通用技术。放眼国外,Google、Microsof...

    芋道源码

扫码关注云+社区

领取腾讯云代金券