在Silverlight中添加图片,目前支持的Image格式有jpg和png两种,如何在目录中添加,有些什么技巧呢?

 <StackPanel Background="White" Orientation="Vertical">
<Image x:Name="AA" Source="/images/a.png" Stretch="None"/>
<Image x:Name="BB" Source="images/b.png" Stretch="None" />
</StackPanel>

反斜杠forward-slash?有没有什么区别呢?以反斜杠开头的a图片需要放在网站站点ClientBin目录下的相应文件夹里,不以反斜杠开头的b图片应该放在Silverlight目录下的相应文件夹里。这样才可正确引用,否则的话将会发生ImageError。

反斜杠开头的相对路径,代表的相对位置是应用程序运行的根目录,即.xap压缩包内,若在这其中寻找不到要引用的文件,则相对路径的回退机制(fallback mechanism )自动在在.xap所在的目录,本例即为ClientBin目录中寻找加以引用。两个位置都没有,才会发生错误。不以"/"开头,则代表的相对位置是引用该图片的XAML文件所在的目录,如page.xaml文件所在的目录。

那么究竟选择哪种方式呢?把xap文件重命名为zip文件,解压之,再用reflector反编译其中的dll文件,发现其包含了b图片,却没有a图片。其实也很明显,a所在的images文件夹与.xap同级,自然不会包含在内。由此可知,不以反斜杠开头的a图片嵌入到Silverlight程序中的xap文件直接下载到客户端,而a图片则按需索取(on-demand),当显示时再去下载。当数据量较大时,不以反斜杠开头的方式加载程序的时间就过长,用户体验不好,以"/"开头自然就无此无虑,不过以反斜杠开头的话,在xaml中设计预览看不到,只有程序运行才可以看到。(若为了预览,可先从ClienBin那里复制一份放在page.xaml同级目录下供设计使用,程序发布时予以删除。)其实也可以直接在TestPage.aspx中测试就可以看到图片了,而在page.xaml中直不能显示。

除了在XAML中直接确定Image的Source URI,当然也可以在code-behind中确定,此时反斜杠的用法和XAML中相通。

 C#:Image img = new Image();
img.Source = new BitmapImage(new Uri("test.jpg", UriKind.Relative)); //page.xaml所在目录下
//img.Source = new BitmapImage(new Uri("/test.jpg", UriKind.Relative)); //.xap所在目录下

假如使用诸如http://www.csdn.net/test.jpg之类绝对URI就没反斜杠什么事了。在代码中还可以利用Application.Current.Host.Source.AbsolutePath等方法。

再深入一点,图片放在与page.xaml同级的文件夹下,一样可以使用反斜杠进行引用。只需要在相应图片的属性里,把Build Action

选择为"Content"即可,不过该图片还是被放到.xap压缩包里了,这是要注意的。

关于在Silverlight中添加图片的问题的更多相关文章

  1. 在RichTextBox控件中添加图片和文字

    public void SetText(RichTextBox rtb) { rtb.Text = "在RichTextBox控件中添加图片和文字" + Environment.N ...

  2. ArcMap图层属性表中添加图片

    一看标题是不是有点懵?懵就对了!刚接触到的时候我也有点懵,属性表不是都是文本啊数字啊之类的格式,怎么还可以存图片,下面就带大家来看看吧! 一.关于图层入库问题 图层进入数据库和图层以shp格式存储时, ...

  3. 如何在github的README.md中添加图片

    如何在github的README.md中添加图片 总结: 链接引用:![Image text](图片的链接地址) 简介: 1.在github上的仓库建立一个存放图片的文件夹,文件夹名字随意.如:img ...

  4. ag-grid 表格中添加图片

    ag-grid是一种非常好用的表格,网上搜索会有各种各样的基本用法,不过对于在ag-grid 表格中添加图片我没有找到方法,看了官方的文档,当然英文的自己也是靠网页翻译,最后发现有这么一个例子,我知道 ...

  5. iview+vue 表格中添加图片

    开门见山,话不多说,要在表格中添加图片,可以使用td: <table " width="100%"> <tr class="tr-style ...

  6. 在github中的READEME中添加图片或者动图

    在github中reademe中添加动图或者图片 将你需要展示的图片放在这个项目中的某个文件夹中,然后再reademe中这样引入 ![maze](https://github.com/GainLoss ...

  7. 给iOS项目中添加图片,并通过UIImageView引用和显示该UIImage图片

    [问题] 关于iOS/iPhone中的文件选择对话框,用于用户去选择图片等文件 过程中,问题转换为,需要给当前iOS项目中,添加一个图片. 类似于Windows开发中的资源文件,其中图片文件属于资源的 ...

  8. Flask——向博客文章中添加图片

    未添加图片样式 添加图片设置: 1.允许渲染img标签 在数据库文章模型allowed_tags中添加img 2.给clean函数加个参数attributes=attrs, attrs = { '*' ...

  9. TextView和EditText中添加图片(ImageSpan)

    编辑框中加图片,以前一直以为很复杂,后来发现android有些类已经很好的实现了这些功能. 代码如下: [java] view plaincopy mSubjectDetailView = (Text ...

随机推荐

  1. npoi设置数据有效性

    npoi设置数据有效性 public void SetDataValidate(ISheet sheet, int firstCol, int lastCol) { CellRangeAddressL ...

  2. Angular5学习札记

    1.使用cnpm安装jQuery和bootstrap后,页面没有加载的问题 -使用cnpm安装的路径和使用npm安装路径不一样,解决如下: 把css路径改成"../node_modules/ ...

  3. ---转载---phython资料

    整理汇总,内容包括长期必备.入门教程.练手项目.学习视频. 一.长期必备. 1. StackOverflow,是疑难解答.bug排除必备网站,任何编程问题请第一时间到此网站查找. https://st ...

  4. c# 使用ssh.net 上传文件

    在ssh.net 客户端实例下无法普通用户切换到su root  超级用户,原因是tty 的不支持,具体原因未查, 连接时用超级用户,问题解决 使用ssh.net  能实现远程命令,  使用其中的sf ...

  5. dbus 消息和消息总线实例讲解-二

    转自:http://www.fmddlmyy.cn/text53.html 2.3.2.ListActivatableNames和服务器的自动启动 运行: $ dbus-send --system - ...

  6. Tinyos学习笔记(一)

    简述:发送和接受数据的程序分别烧录到两个节点上,发送方发送流水灯数据,接受方接受数据并实现流水灯 1.发送和接受程序用到的组件及其接口如图(通过make telosb docs获得)所示:   2.发 ...

  7. Zookeeper 修改heap size

    对应原文出处: https://support.pivotal.io/hc/en-us/articles/201861286-Zookeeper-service-heapsize-is-10GB-or ...

  8. 带token的get和post方法

    GET和POST传值失败,多半是传输的字符串和URL的事 public static string ExcuteGetToken(string serviceUrl, string ReqInfo, ...

  9. windows server 2008 - 隐藏磁盘分区 (2)

    二 创建策略并设置给指定用户 1 打开“组策略管理”(在这里创建策略) cmd下输入GPMC.MSC 打开组策略管理   随后在域上右键选择“在这个域中创建GPO并在此处链接”,输入名字“磁盘管理策略 ...

  10. 【Linux】CentOS 7.4 安装 MySQL 8.0.12 解压版

    安装环境/工具 1.Linux(CentOS 7.4版) 2.mysql-8.0.12-el7-x86_64.tar.gz 安装步骤 参考:https://dev.mysql.com/doc/refm ...