在 Microsoft Visual Studio 中,可通过将一个文件添加到项目并将其
BuildAction 设置为
Resource来创建资源文件。
// Navigate to xamlpage
Uri uri = new Uri( "/PageResourceFile.xaml",UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
Page page = (Page)reader.LoadAsync(info.Stream);
this.pageFrame.Content =page;
Uri uri = new Uri( "/PageResourceFile.xaml",UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
Page page = (Page)reader.LoadAsync(info.Stream);
this.pageFrame.Content =page;
比如项目WPFApplication下面创建一个Images目录,里面专门放置图片文件,那么要设置图片路径就这样写:
<ImageBrush x:Key="TileBrush"
ImageSource="/WPFApplication;component/Images/6.jpg">
<ImageBrush
==>>>component是固定写法,你可以理解为关键字。另外记得将添加进去的图片的生成动作设置为“嵌入的资源”,那样图片就会作为资源文件和exe程序结合在一起。
==>>>不推荐用嵌入的方式,那样生成的dll会格外的大, 图片生成动作用content,然后选copy if new ImageSource中用相对路径就可以了。
wpf教程--图片资源路径问题及C#代码设置图片路径
在wpf中,设置图片路径有2种方法:
一开始我在后台直接复制图片路径是物理路径:
b.ImageSource = new BitmapImage(newUri("../Themes/ZCThemes/skin/icon/card_unchoose.png",UriKind.RelativeOrAbsolute));
在visual studio 2013中是没有问题的。但是发布后,单独运行exe就出错了。
这个就设计到wpf的新协议:
其中较为常见的情况是用Uri加载图像。Uri表达式的一般形式为:协议+授权+路径
按照以下操作可以解决:
删除XAML中的Source属性,在后台为两个图片控件设置Source属性。有如下三种WPF资源路径方式。
第一种
imgContent.Source = new
BitmapImage(new Uri(
"Content.jpg", UriKind.Relative));
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"));
第一种和第二种都可以访问相对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:,,,