WPF中资源引用方式汇总
在WPF应用程序开发中,总是难以记住各种访问资源的方法,遂逐一记下。
先从资源是否编译到程序集分类
一.程序集资源
资源在编译的时候嵌入到程序集中。WPF中的XAML会被编译为BAML,图片等其他资源均被编译到程序集中AssemblyResources.g.resources中
为了能够成功使用程序集资源,需要注意一下两点:
- 资源的Build Action必须是Resource,不复制到输出目录。
- 不要在Project Properties中使用Resource选项卡,WPF不支持这种类型的资源URI。
使用资源
可以在XAML中使用如下方式使用资源
<Image Source="Image/yun.png"></Image>
也可以使用代码,不过这里有相对路径和绝对路径之分
img.Source=new BitmapImage(new Uri(@"E:\Photo\Image\yun.png")); img.Source=new BitmapImage(new Uri("Image/yun.png",UriKind.Relative));
但在实际项目中,资源总在另外一个程序集中,那么就需要跨程序集访问资源。语法如下:
pack://application:,,,/AssemblyName;Component/ResourceName
首先要引用具有资源的程序集
在XAML中如下使用
<Grid>
<Grid.Background>
<ImageBrush ImageSource="pack://application:,,,/Controls;Component/Image/yun.png"></ImageBrush>
</Grid.Background>
</Grid>
在代码中也是同样的使用方式
img.Source=new BitmapImage(new Uri("pack://application:,,,/Controls;Component/Image/yun.png"));
另外就是资源字典的使用,一个资源字典中可以包含程序中需要使用的样式,画笔等等,资源文件也可再包含资源文件
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary.xaml"></ResourceDictionary>
<ResourceDictionary Source="Dictionary2.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="btnStyle" TargetType="Button">
<Setter Property="Background">
<Setter.Value>
<ImageBrush ImageSource="Image/yun.png"></ImageBrush>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
如果程序需要使用到换肤功能的话,那么最好由Application来加载统一的资源字典,这样实现换肤功能的话,其实就是将Application下的这一套资源换成另一套,唯一的弊端就是,在vs中看不到已经使用的样式,只有运行起来才能看到。控件换肤也是同样的道理。可以看下下面的例子
http://files.cnblogs.com/action98/WPF_ChangeSkin_Sample.rar
http://files.cnblogs.com/action98/CustomControl%E6%8E%A7%E4%BB%B6%E6%8D%A2%E8%82%A4.rar
二.内容文件
在如下情况中不宜使用程序集资源,而是使用应用程序部署文件。
- 希望改变资源文件,而又不想重新编译应用程序。
- 资源文件非常大。
- 资源文件是可选的,并且可以不随程序集一起部署。
- 资源是声音文件。
为了能够成功使用内容文件,需要注意两点
- 将资源的Build Action始终设置为Content
- 将资源的Copy to Output Directory始终设置为CopyAlways
使用的时候同程序集使用的是同一套URI方法
Added by HeavenTao,2013/12/18
WPF中资源引用方式汇总的更多相关文章
- WPF中静态引用资源与动态引用资源的区别
WPF中静态引用资源与动态引用资源的区别 WPF中引用资源分为静态引用与动态引用,两者的区别在哪里呢?我们通过一个小的例子来理解. 点击“Update”按钮,第2个按钮的文字会变成“更上一层楼”, ...
- WPF 中资源路径的问题
WPF 中资源路径的问题 1. 引用当前工程的资源(注意xxxx.png的build action 应设置为Resource 或Embedded Resource) <ImageBrush Im ...
- WPF中资源的引用方法
一.引用同一个程序中的资源 1.使用相对Uri来引用资源,如下所示 img.Source=new BitmapImage(new Uri(@"d"\iamges\Backgroun ...
- WPF中的常用类汇总:
1.FrameworkElement: WPF中大部分的控件都可以转化成FrameworkElement,利用FrameworkElement属性获取相应的值: 2.WPF获取当前工作区域的宽度和高度 ...
- WPF 中的绑定方式
1.元素间的绑定 xaml方式 <Slider Name="slider1" Value="20"/> <TextBlock T ...
- vue中组件传值方式汇总
在应用复杂时,推荐使用vue官网推荐的vuex,以下讨论简单SPA中的组件间传值. 一.路由传值 路由对象如下图所示: 在跳转页面的时候,在js代码中的操作如下,在标签中使用<router-li ...
- Android Studio中怎样引用图片资源
随着不断接触Android Studio,越来越发现和Eclipse有着巨大的差别. 不管是表面的目录结构,还是内在对各种资源的管理. 本篇就来聊聊Android Studio中怎样来显示图片. 以及 ...
- Android ImageView 不显示JPEG图片 及 Android Studio中怎样引用图片资源
Android ImageView 不显示JPEG图片 今天在写一个小实例,ImageView在xml里面设置的是INVISIBLE,在代码里须要设置成setVisibility(View.VISIB ...
- How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?
原文 https://stackoverflow.com/questions/28240528/how-do-i-duplicate-a-resource-reference-in-code-behi ...
随机推荐
- libc.so.6被删后导致系统无法使用的原因及解决方法
记一次升级glibc库发生的错误 今天给glibc库升级,发生了一件让我吓出一声汗的事情,我把动态库中的libc.so.6给删了,瞬间所有的非系统命令都无法使用,使用就报错 当时就吓尿了,生产环境被我 ...
- Intent详解
ntent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与通 ...
- Hive tuning tips
1. limit Hive has a configuration property to enable sampling of source data for use with LIMIT: hiv ...
- 二叉树结构 codevs 1029 遍历问题
codevs 1029 遍历问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍 ...
- 谈谈自己对java的学习看法
从明天起,开始整理java的基础知识,进行巩固学习. 今天呢,谈谈自己的一点想法.很多人不知道java怎么学,学什么,有的是直接在网上找一些视频来看,不懂的地方到处跑群里问,结果效果并不是太好,怎么办 ...
- 创建自定义的Cocos2d-x场景
操作步骤 1.创建cocos2d-x工程 2.新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#define __SCENE1_H__ #i ...
- 【shiro】shiro学习笔记1 - 初识shiro
[TOC] 认证流程 st=>start: Start e=>end: End op1=>operation: 构造SecurityManager环境 op2=>operati ...
- 本地不安装Oracle,plsql远程连接数据库
由于Oracle的庞大,有时候我们需要在只安装Oracle客户端如plsql.toad等的情况下去连接远程数据库,可是没有安装Oracle就没有一切的配置文件去支持.最后终于发现一个很有效的方法,Or ...
- (copy)C#时间日期操作
copy to:http://www.cnblogs.com/loveme123/archive/2012/06/27/2565547.html 一.C# 日期格式 DateTime dt = Da ...
- easyui添加自定义验证规则
$.extend($.fn.validatebox.defaults.rules, { phone: { validator: function (value) { return /^(\d{3,4} ...