文章目录

  • WPF资源
    • 0.WPF支持的资源形式或者说分类
    • 1.资源层级有四个等级
    • 2.合并资源字典到Resource属性
    • 3.关于静态StaticResource和动态Resource
    • 4.关于资源字典ResrouceDictionary
    • 5.后台代码FindResource方法能查找到什么范围内的资源
    • 6使用Pack URI路径访问二进制资源(抄自《深入浅出WPF》)

WPF资源

什么叫WPF的资源(Resource)?
根据《深入浅出WPF》,首先理解以下“程序资源”:编程语言编译器可以实现将应用程序使用到的外部文件编译进程序主体(dll或者exe)、称为程序不可分割的一部分,这部分被编译进程序主体的外部文件,我们可以称之为“程序资源”。

资源是保存在可执行文件中的一种不可执行数据。而对于WPF应用程序而言,WPF资源几乎可以包含图像、字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性。也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。有了资源,我们就可以在xaml中或者后台C#代码中使用这些资源,例如给元素的属性赋值,如设定元素的某些属性值,设定模板,设定Style

使用资源的优势:

  1. 由于不用写在程序代码中,方便管理:便于更新。
  2. 优化资源,节省空间。资源一旦定义,便可重复利用。还记得FLASH中的将物体转换为元件吗?一旦将物体转换为元件,就可以重复利用了。在WPF中,似乎与之有共通之处。所不同的是,WPF将资源保存在XAML中,对我们而言是“可见的”。

以上转载自博客。

0.WPF支持的资源形式或者说分类

主要转载自博客:

1.二进制资源(binary resource)

  • Resource:将资源嵌入程序集中,WPF将相关资源打包到.Resources文件,然后再由编译器嵌入到程序集文件中
  • Content:资源不会嵌入到程序集,仅仅在程序集清单中添加一条记录。资源文件必须随其他程序集文件一起部署到目标目录。
  • Loose File:这类资源通常是运行期动态确定或加入的

2.逻辑资源(logical resource)

  • xaml各个元素的Resource属性
  • 资源字典ResourceDictionary

3.resx资源(同winform相同)

这里先仅了解逻辑资源。逻辑资源不仅可以定义文本、图片资源等,甚至可以定义一个完整的子元素。 每个WPF UI元素都有Resources属性。

我理解的逻辑资源包括(我认为的,包含在Page、Window、UserControl、类似Button这样的UI控件的Resource属性中的资源和ResourceDictionary中的资源,这些资源应该至少可以是以下这些东西):

  1. Style标签
  2. Template
  3. 类似SolidColorBrush这样的可以作为控件的属性值的标签
  4. 还有ResourceDictionary.MergedDictionary
  5. 其他。但是我不知道具体还有什么

1.资源层级有四个等级

  • 物件(应该是指控件)级:

    • 只能套用在这个对象物件或者其子物件(应该是指控件)中(没理解)
    • 定义范围:
  • 文件级
    • 可套用到这个文件中的所有物件(应该是指控件),如< Window.Resources>
    • 定义范围:Windows或者Page层级的xaml
  • 应用程序级
    • 定义范围:App.xaml
    • 可以套用在程序的任何地方
  • 字典级
    • 定义范围:把资源封装成一个资源字典, 定义到ResourceDictionary的XAML文件中(没理解)
    • 可以在另一个应用程序中重复使用

由于每个元素都有自己的资源集合,WPF中资源的寻找是通过WPF元素树进行递归搜索的。

2.合并资源字典到Resource属性

逻辑资源也可以集中放在资源字典ResourceDictionary中。

<ResourceDictionary>
<ContentControl x:Key="label1">Hello, World!</ContentControl>
<ContentControl x:Key="label2">Hello, C#!</ContentControl>
</ResourceDictionary>

通过合并资源字典把资源字典的资源添加到Resource属性

<Window.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Dictionary1.xaml" /></ResourceDictionary.MergedDictionaries></ResourceDictionary>
</Window.Resources>或者<Window.Resources><ResourceDictionary Source="src.xaml" />
</Window.Resources>

3.关于静态StaticResource和动态Resource

目前确认的是,在窗体的xaml中使用Window.Resource来声明的资源,在后面的控件中进行引用时,可以使用如下两种方式进行引用:

Style="{StaticResource MySelfDefineStyle}"
或者
Style="{StaticResource ResourceKey=MySelfDefineStyle}"Style="{DynamicResource MySelfDefineStyle}"
或者
Style="{DynamicResource ResourceKey= MySelfDefineStyle}"

当我们说静态和动态资源的时候,应该指对资源的使用方式,所以我猜测逻辑资源可以通过静态资源引用或者动态资源引用的方式引用(但我奇怪,我们似乎是在说资源的分类本身包括静态和动态两种,而非引用方式)。
这两种方式的引用,根据网上的说法,我认为主要区别在于静态资源不可修改,动态资源允许修改(静态资源修改了,界面显示上也不会有反应)。静态资源使用是指在程序载入内存时对资源的一次性使用。

4.关于资源字典ResrouceDictionary

暂不研究

5.后台代码FindResource方法能查找到什么范围内的资源

每个UI元素都有自己的FindResource方法。

目前猜测控件元素的FindResource方法检索资源的方式:
程序对一个控件对象检索(查找)资源时,会先查控件自己的Resoources属性,如果没有这个资源,程序会沿着逻辑树向上一级控件查找,如果连最顶层的容器(我猜是类似Window、Page这类),程序就会去查找Application.Resources(程序的最顶级资源),如果没有找到则抛异常。(这里的程序不知道是不是指编译器)。

如果知道资源就在某个元素的Resources中,那么可以直接调用这个函元素的.Resource[“key”]进行检索。

6使用Pack URI路径访问二进制资源(抄自《深入浅出WPF》)

xaml中的使用的格式是:

pack://application:,,,[程序集名称;][版本号;][文件夹名称/]资源文件名

示例:

<Image x:Name="ImageTest" Source="pack://application:,,,/Resource/Images/Rafale.jpg">然后,由于pack://application:可以省略,后面的程序集名称、版本号常使用缺省值,因此可以写成:
<Image x:Name="ImageTest" Source="/Resource/Images/Rafale.jpg">这里的文件路径应该是程序启动目录的相对路径

C#中示例:

Uri uri = new Uri(@"Resource/Images/Rafale.jpg",UriKind.Absolute);
this.ImageTest.Source = new BitMapImage(uri)

WPF的资源Resource相关推荐

  1. 关于WPF的资源引用问题

    WPF的资源引用大致有下面几个点需要讨论,下面我们逐个讨论. 目录 Pack Uri方案 资源文件Pack Uri 本地程序集资源 引用程序集资源 内容文件 Pack Uri 源站点 Pack Uri ...

  2. WPF XAML 资源样式模板属性存放位置

    WPF XAML 资源样式模板属性存放位置 原文:WPF XAML 资源样式模板属性存放位置 WPF的XAML 资源申明 类似HTML. 整体来说分3种 1.行类资源样式属性 1.1 行内属性 < ...

  3. 使用wpf引入资源文件,RichTestBox加载rtf文件

    最近临时被拉来负责公司客户端界面的一些开发,因为之前做过一些界面相关的开发内容,所以本想着应该分分钟就搞定,却不曾想浪费了我好几天.这里我吐槽一句,我佩服(wpf)是真不好用,尤其是对于之前没接触过这 ...

  4. WPF绑定资源文件错误(error in binding resource string with a view in wpf)

    报错:无法将"***Properties.Resources.***"StaticExtension 值解析为枚举.静态字段或静态属性 解决办法:尝试右键单击在Visual Stu ...

  5. 使用WPF动态资源在Gtk3 C#中进行本地化

    目录 介绍 背景 实现 Windows Linux 扩展 感谢... 参考和出处 下载Gtk示例应用程序-70.9 KB 下载Windows示例应用程序(VS2008)-78.6 KB 下载Windo ...

  6. [WPF]静态资源(StaticResource)和动态资源(DynamicResource)

    一.文章概述 本演示介绍了WPF的静态资源和动态资源的基本使用,并对两者做了简单的比较. 静态资源( StaticResource )指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了 ...

  7. 资源Resource的介绍

    资源 资源是可以在应用程序中的不同位置重复使用的对象. 这些资源主要分为两种类型的资源: XAML 资源和资源数据文件. XAML 资源的示例包括Brush和样式. 资源数据文件是应用程序所需的不可执 ...

  8. springboot 资源resource文件加载优先级

    文章目录 1.问题 2.springboot的资源目录优先级 3.相关源码 3. webjars 1.问题 在通过spring项目官网生成的springboot project项目中,通常我们知道,r ...

  9. 魔幻一般的WPF URI资源引用

    wpf,可以通过URI引用资源,比如图片,xaml,音频等. 如果原来是有html的基础知识,可以用起来会比较方便,比较容易理解. 但是也有可能因为有了html的基础知识因为惯性思维导致无法理解. W ...

最新文章

  1. unity win7 全屏 输入法没有显示_win7电脑无法打字怎么处理 win7电脑无法打字解决方法【详解】...
  2. php redis zset 延迟队列_PHP + Redis 实现简单消息队列
  3. 数据库技术基础:查询优化相关知识笔记
  4. Linux系统日志及日志分析
  5. SCOM Rule 介绍 [SCOM中文系列之六]
  6. 如何安装python3.8_python3.8下载及安装步骤详解
  7. python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
  8. 小程序-picker之key-value形式
  9. windows 2008 安装 apache + mysql + php
  10. Oracle VM VirtualBox 随系统自动启动虚拟机的方法
  11. 苹果mac磁盘清理工具:Pro Disk Cleaner
  12. mapminmax 用法
  13. Windows10+clion+opencv时报错0xC0000139和0xC0000135的解决方法之一
  14. Matlab中plot函数一共能调用颜色字母
  15. 小程序生成图片保存到系统相册_iSee图片专家下载|iSee图片专家 3.930 官方版
  16. Docker笔记 —— 简介与安装 + Centos的一些配置
  17. Deferred Decal(延迟贴花)
  18. php后端开发主要会哪些技术?
  19. 2018年计算机考研调剂信息概况
  20. 2020年中国牛肉市场现状、进出口及产业链分析,牛肉进口量持续增长「图」

热门文章

  1. #2020.02.04训练题解#背包入门(E题)
  2. weiphp mysql权限_weiphp 3.0创建插件提示错误解决办法 提示您没有创建目录写入权限,...
  3. 晶体一秒变晶振,成本直降60%!
  4. php根据阅读记录推荐内容,php记录 - 作业部落 Cmd Markdown 编辑阅读器
  5. 多种形貌氧化锌ZnO纳米片、纳米棒、纳米线、纳米管的合成简单介绍(含电镜图)
  6. vscode CRLF自动转LF
  7. Linux查看目录命令
  8. html页面自动缩放,HTML缩小?
  9. sql删除表所有记录 命令
  10. 2020年诺贝尔物理学奖揭晓!