WPF备忘录(7)WPF图片资源路径介绍

在项目中增加两张图片Content.jpg和Resource.jpg,分别将其生成操作属性设置为Content和Resource。      在界面中增加两个Image控件ImgContent和ImgResource,在XAML中分别设置Source路径为Content.jpg和Resource.jpg。运行后ImgResource能正常显示图片,但是ImgContent控件无显示。将Content.jpg图片拷贝至应用程序的Debug目录中,ImgContent控件可显示图片。      生成操作设置为Resource,生成的时候资源将添加到程序集中。可以尝试将原有的图片删除,图片正常显示。将原有图片用新图片替换,仍显示原有图片。只有选择重新生成操作才能更新图片。      生成操作设置为Content,并不会添加至程序集,而且只有把资源放置在程序运行目录才能访问到资源。程序运行目录调试时是Debug目录,安装后就是程序的安装目录。与直接把资源放置在程序运行目录不同的是,添加Content资源文件,会向程序集(AssemblyAssociatedContentFile)中添加一个定制特性,该程序集记录文件是否存在及其相对位置。我发现VS2008有一个小Bug,在解决方案管理器中将Content.jpg改名为Con.jpg,Bug目录下的图片也做相应的改变。此时编译器报错:文件Con.jpg不是项目的一部分或其“Build Action”属性未设置为“Resource”。但是按F5运行,生成成功并正常显示。可见在改变Content资源的时候,程序集中的定制特性没有做相应的变化。       删除XAML中的Source属性,在后台为两个图片控件设置Source属性。有如下三种方式。  

第一种
imgContent.Source = new BitmapImage(new Uri("Content.jpg", UriKind.Relative));
imgResource.Source = new BitmapImage(new Uri("Resource.jpg", UriKind.Relative));
第二种
imgContent.Source = new BitmapImage(new Uri("pack://application:,,,/Content.jpg"));
imgResource.Source = new BitmapImage(new Uri("pack://application:,,,/Resource.jpg"));
第三种
imgContent.Source = new BitmapImage(new Uri("pack://SiteOfOrigin:,,,/Content.jpg"));

     第一种和第二种都可以访问相对路径的Resource和Content资源。第三种方式可以访问网站运行目录下的Content资源文件以及完全松散的文件。完全松散的文件指那些没有添加到项目中,只是拷贝在程序目录中的文件。应用程序根本不知道它的存在。      pack://application:,,,/Content.jpg表示当前项目的资源。它是pack://application:,,,/DllName;Component/Content.jpg的简写。将DllName替换成其他程序集,就可以访问其他程序集的资源。      pack://SiteOfOrigin:,,,/Content.jpg表示从部署位置访问文件。      pack URI格式是XML文件规范的一部分,具体格式如下 pack://packageURI/partPath。PackageURI实际上是在URI中放一个URI,它是把反斜杠都变成了逗号。packageURI可以志向一个XPS文档,例如file : /// c: /Document . xps会被编码为file:...c:,Document.xps。在WPF程序中有两种URI系统是特别处理的:      siteOfOrigin:/// 编码后siteOfOrigin:,,,      application:///   编码后application:,,,   3个逗号其实是反斜杠编码过来的。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏vue学习

10、less的引用及公共变量的抽离

less是什么自然不用多言,乃一个css预编译器,可以扩展css语言,添加功能如如允许变量(variables),混合(mixins),函数(functions...

651
来自专栏前端

前后端分离ueditor富文本编辑器的使用-Java版本

最近在写一个自己的后台管理系统(主要是写着玩的,用来熟悉后端java的知识,目前只是会简单的写点接口),想在项目中编写一个发布新闻文章的功能,想到了使用百度的u...

91910
来自专栏每日一篇技术文章

微信小程序_09 HTTPS

标准模板 var util = require('../../utils/util.js') wx.request({ url: 'https://URL...

581
来自专栏小程序容器

OpenApplus小程序容器

OpenApp+ (https://www.openapplus.com)一个小程序容器,配置简单、功能完善、界面流畅、开箱即用!使用OpenApp+可以快速扩...

3659
来自专栏云加新鲜事儿

智能云上手指南:如何使用万象优图服务的 Python SDK

本文将为广大云开发者介绍如何使用万象优图服务的 Python SDK。

3163
来自专栏有趣的Python

9- Flask构建弹幕微电影网站-后台逻辑(一)

已上线演示地址: http://movie.mtianyan.cn 项目源码地址:https://github.com/mtianyan/movie_proj...

35910
来自专栏运维小白

11.26 访问控制Directory

访问控制 – Directory目录概要 核心配置文件内容 <Directory /data/wwwroot/111.com/admin/> ...

1846
来自专栏深度学习之tensorflow实战篇

python(Django之html模板继承)

Django之html模板继承简单案例 1 构建母板,确定不变内容和可变内容 ? 2 构建子板,对可变内容进行填充 ? 结果: ? Dja...

3185
来自专栏玄魂工作室

Python黑帽编程2.8 套接字编程

套接字编程在本系列教程中地位并不是很突出,但是我们观察网络应用,绝大多数都是基于Socket来做的,哪怕是绝大多数的木马程序也是如此。官方关于socket编程的...

26511
来自专栏我的博客

Thinkphp3.2.3FTP上传文件同名覆盖问题

//原代码在\ThinkPHP\Library\Think\Upload\Driver\Ftp.class.php //大概在94行左右 /** ...

27610

扫描关注云+社区