最近写代码的时候遇到过好几次引用某个路径下图片资源的情况,思索了一下,便将自己所知的在xaml里引用图片资源的方法写成了个小Demo,并完成了这篇博文。希望罗列出的这些方式能够对大家有所帮助。

Xaml中引用图片资源的方式主要有两种:1.引用自己工程路径下的图片(包括根目录下的xaml引用根目录或者子目录下的图片,或者子目录下xaml引用根目录下或者其他子目录的图片);2.引用其他dll工程下的图片文件(同样也包括根目录或者子目录下的图片)。下面就来看看所罗列的这些情况代码是如何完成的吧。

首先,我建了个工程叫ImageSourcePathTest,并且将四张图片资源加到工程里去了,其中,有两张图片在根目录下,两张图片在子目录下,具体如下图:

图1 创建工程并添加图片

其次,在ImageSourcePathTest的View文件夹下新建UserControl1.xaml文件,用于测试子目录下xaml引用根目录下图片的情况。

之后,我再新建一个工程ImagePathDll,工程的OutType设为ClassLibrary,此工程下面仅放置图片,其他文件都可以删除,输出路径改为跟之前的ImageSourcePathTest工程一致,这样就能引用到该dll的图片。此工程下放置图片位置如下图:

图2 创建Dll引用工程并添加图片

图3 ImagePathDll输出路径

如上步骤做完之后就可以写代码了,但是在写代码之前还有一个最重要的步骤,就是设置图片的Build为Resource(此步骤很关键,没有此步骤则图片没法看到)。

图4 图片的Buid设为Resource

除此之外还有第二关键的步骤,就是设置ImageSourcePathTest引用ImagePathDll。设置方式:Project——AddReference——Projects,添加ImagePathDll引用。

图5 设置工程引用ImagePathDll

最后就是写代码了,Window1.xaml里引用根目录下和子目录下图片的代码为:

 <Window x:Class="ImageSourcePathTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ImageSourcePathTest" Width="" Height=""
xmlns:local="clr-namespace:ImageSourcePathTest">
<StackPanel>
<UniformGrid Rows="" Columns="">
<Image Source="IMG1.PNG"/><!-- 直接引用根目录下的图片 -->
<Image Source="Image/IMG2.PNG" /><!-- 引用子目录下的图片 -->
<Image Source="pack://application:,,,/IMG3.PNG" /><!-- Uri引用根目录下的图片 -->
<Image Source="View/IMG4.PNG" /><!-- 引用子目录下的图片 -->
<Image Source="/ImagePathDll;component/IMG5.PNG"/><!-- 引用dll根目录下的图片 -->
<Image Source="/ImagePathDll;component/Image/IMG6.PNG" /><!-- 引用dll子目录下的图片 -->
</UniformGrid>
<local:UserControl1 /><!--子目录下引用图片-->
</StackPanel>
</Window>

ImageSourcePathTest下子目录下UserControl1.xaml引用代码为:

<UserControl x:Class="ImageSourcePathTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel Orientation="Horizontal">
<Image Source="../Image/IMG2.PNG" ></Image>
<Image Source="../IMG3.PNG" ></Image>
<Image Source="IMG4.PNG" ></Image>
</StackPanel>
</UserControl>

代码其实很简单,其他的都不用详细解释了,只有uri引用方式需要详细说明一下。WPF引入了统一资源标
识Uri(Unified Resource Identifier)来标识和访问资源。其中较为常见的情况是用Uri加载图像。Uri表

达式的一般形式为:协议+授权+路径
协议:pack://
授权:有两种。一种用于访问编译时已经知道的文件,用application:///。一种用于访问编译时不

知道、运行时才知道的文件,用siteoforigin:///。在这里加图片时,我们选用前者,即

application:///,但是书写时候,我们一般用逗号代替斜杠,也就是改写作application:,,,。
路径:分为绝对路径和相对路径。这里我们选用相对路径,普适性更强。

最终运行结果如下图:

图6 运行结果

写到这里我的这个小Demo就写完了,很简单的代码,不知道对大家是否有帮助呢。PS,这是我第一篇博文

,以后会持续更新WPF一些使用心得与体会,希望能开个好头哦!

2016-08-07

Xaml引用图片路径的方式的更多相关文章

  1. 用户控件UserControl图片资源定位(一)---Xaml引用图片

    MEF编程实现巧妙灵活松耦合组件化编程,一些细节需要花费不小心思去处理: 其中组件中若包含用户控件,且需要访问图片资源,那么Xaml引用资源需要做以下设置 1. 用户控件(usercontrol)所在 ...

  2. webpack下css/js/html引用图片的正确方式

    在webpack的处理下,为了使引用的图片被打包编译(以把src的图片文件编译到dist中或者对src的文件进行base64编码),应使用如下引用方式: 1. 在html/ejs等中引用图片: 借助r ...

  3. Tymeleaf模板引擎背景图片路径书写方式

    <body style="background: url(../static/assets/img/bg-so-white.png);" th:style="'ba ...

  4. webpack4 前端框架基础配置实例-解决css分离图片路径问题

    1.安装nodejs 2. 需要全局和项目安装webpack和webpack-dev-server npm install webpack webpack-dev-server -g npm inst ...

  5. nodejs之获取客户端真实的ip地址+动态页面中引用静态路径下的文件及图片等内容

    1.nodejs获取客户端真实的IP地址: 在一般的管理网站中,尝尝会需要将用户的一些操作记录下来,并记住是哪个用户进行操作的,这时需要用户的ip地址,但是往往当这些应用部署在服务器上后,都使用了ng ...

  6. css和js引用图片的路径问题

    原文转自:http://www.cnblogs.com/azumia/archive/2012/06/17/2552346.html 在JS文件中书写相对路径:JS文件是指在页面中引用的外部JavaS ...

  7. Nginx部署静态页面及引用图片有效访问的两种方式

    nginx安装百度一下有很多,直接正题: 静态文件目录结构 file#文件位置 /home/service/file/ css js images html fonts 配置nginx.conf核心代 ...

  8. vue项目打包后资源相对引用路径的和背景图片路径问题

    vue项目中若要使用相对路径来获得相应静态资源,需要修改以下内容来确保项目打包后能正常运行. 1.修改config => index.js => build => assetsPub ...

  9. WPF调用图片路径,或资源图片

    一.加载本项目的图片WPF引入了统一资源标识Uri(Unified Resource Identifier)来标识和访问资源.其中较为常见的情况是用Uri加载图像.Uri表达式的一般形式为:协议+授权 ...

随机推荐

  1. MySql中order by和union all同时使用

    () UNION ALL () 两边的语句加上括号就可以了

  2. TestNG实现用例运行失败自动截图(转载)

    转载自:https://blog.csdn.net/galen2016/article/details/70193684 重写Listener的onTestFailure方法 package com. ...

  3. Ionic2+WebApi 导出Excel转Pdf文件。

    步骤: 1.首先在WebApi中先把excel生成好. 2.把excel转成Pdf,并返回下载的链接. 3.Ionic2的页面做好下载的接口. 嗯~思路很清晰,那么下面就来详细的操作吧. 以下是H5的 ...

  4. 20175314 实验二 Java面向对象程序设计

    20175314 实验二 Java面向对象程序设计 一.实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 二 ...

  5. Joe Hocking - Unity in Action. 2nd Ed [2018]

    Unity in Action. 2nd Ed, 一本关于unity开发的英文书籍,初中级 PDF格式 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop135452397.tao ...

  6. python字符串的魔法

    *首字母大写test="aslf"v=test.capitalize()print(v) *所有字母变成小写test="QWFDE"v=test.casefol ...

  7. ubuntu18.04微信小程序学习笔记

    安装微信小程序开发工具 安装 https://github.com/cytle/wechat_web_devtools 创建快捷方式 sudo nautilus //在/usr/share/appli ...

  8. 使用Jmeter连接数据库检查数据库记录的方法

    一.首先下载Jdbc驱动(jdbc驱动分两种,classes与ojdbc文件,该用哪个需要检查电脑安装的jdk版本(查看方法cmd命令java –version) 关于各种版本的说明:http://e ...

  9. Spring in Action 第一章 Spring之旅

    1.1 简化Java开发 1.1.2 依赖注入(DI) 松耦合:如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能在对象本身毫不知情的情况下,用不同的具体实现进行替代 ...

  10. dskinlite(uieasy mfc界面库)使用记录4:绘制动态元素(listbox)

    效果图: XML代码: 299行的headerctrl只针对listview有效,这里是listbox,忽略 wirelessName,wirelessStatus,wirelessSignal会通过 ...