WPF资源路径详细概念详解

开发 开发工具
WPF资源路径的内容对于初学者来说是一个比较难以掌握的知识。大家可以通过具体的实际操作来慢慢体会其中包含的内容。

我们在这篇文章中将会为大家详细介绍有关WPF资源路径的一些概念介绍。希望大家可以通过本文介绍的内容能加深对WPF的理解。#t#

在项目中增加两张图片Content.jpg和Resource.jpg,分别将其生成操作属性设置为Content和Resource。在界面中增加两个Image控件ImgContent和ImgResource,在XAML中分别设置Source路径为Content.jpg和Resource.jpg。

运行后ImgResource能正常显示图片,但是ImgContent控件无显示。将Content.jpg图片拷贝至应用程序的Debug目录中,ImgContent控件可显示图片。

生成操作设置为Resource,生成的时候资源将添加到程序集中。可以尝试将原有的图片删除,图片正常显示。将原有图片用新图片替换,仍显示原有图片。只有选择重新生成操作才能更新图片。

生成操作设置为Content,并不会添加至程序集,而且只有把WPF资源路径放置在程序运行目录才能访问到资源。程序运行目录调试时是Debug目录,安装后就是程序的安装目录。

与直接把资源放置在程序运行目录不同的是,添加Content资源文件,会向程序集(AssemblyAssociatedContentFile)中添加一个定制特性,该程序集记录文件是否存在及其相对位置。我发现VS2008有一个小Bug,在解决方案管理器中将Content.jpg改名为Con.jpg,Bug目录下的图片也做相应的改变。

此时编译器报错:文件Con.jpg不是项目的一部分或其“Build Action”属性未设置为“Resource”。但是按F5运行,生成成功并正常显示。可见在改变Content资源的时候,程序集中的定制特性没有做相应的变化。

删除XAML中的Source属性,在后台为两个图片控件设置Source属性。有如下三种WPF资源路径方式。

第一种

  1. imgContent.Source = new 
    BitmapImage(new Uri(
    "Content.jpg", UriKind.Relative));  
  2. imgResource.Source = new 
    BitmapImage(new Uri
    ("Resource.jpg", UriKind.Relative)); 

第二种

  1. imgContent.Source = new 
    BitmapImage(new Uri("pack:
    //application:,,,/Content.jpg"));  
  2. imgResource.Source = new 
    BitmapImage(new Uri("pack:
    //application:,,,/Resource.jpg")); 

第三种

  1. imgContent.Source = new 
    BitmapImage(new Uri("pack:
    //SiteOfOrigin:,,,/Content.jpg")); 

第一种和第二种都可以访问相对WPF资源路径的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的WPF资源路径可以志向一个XPS文档,例如file : /// c: /Document . xps会被编码为file:...c:,Document.xps。在WPF程序中有两种URI系统是特别处理的:

siteOfOrigin:/// 编码后siteOfOrigin:,,,

application:/// 编码后application:,,,

3个逗号其实是反斜杠编码过来的。

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-28 16:54:30

WPF注释

2009-12-28 16:28:35

WPF元素类型样式

2009-12-24 15:36:41

WPF逻辑树

2009-12-28 17:54:49

WPF嵌入式资源

2009-12-23 09:18:39

WPF开发工具

2009-12-28 14:32:31

WPF窗体对话框

2009-12-28 13:38:35

WPF类型转换器

2009-12-23 17:01:09

WPF Command

2009-12-25 10:05:06

WPF资源

2023-10-04 18:24:54

wpf动态资源

2009-12-29 14:20:27

WPF路径

2009-12-25 11:23:43

WPF命令模型

2009-12-28 16:20:50

WPF内嵌样式

2009-12-29 09:54:27

WPF文字布局

2009-12-23 15:27:34

WPF图形系统

2009-12-28 15:18:29

WPF控件模型

2009-12-28 14:40:08

WPF属性

2009-12-28 11:41:04

WPF 3.5特点

2009-12-28 10:47:58

WPF绘图

2009-12-23 17:42:37

WPF Control
点赞
收藏

51CTO技术栈公众号