[WPF系列]-DynamicResource与StaticResource的区别
探讨:
1、当引用资源时,选择StaticResource还是DynamicResource的考虑因素:
(1)在哪里创建资源?(资源的范围或层级)
a. 资源是在一个Page/Canvas/Window中?
b. 在应用程序范围中?
c. 在松散的Xaml中?
d. 在某个特定的Object(比如某个特定的Button)中?
物件级:此时,资源只能套用在这个Object物件,或套用至该物件的子物件。
文件级:如果将资源定义在Window或Page层级的XAML档中,那么可以套用到这个文件中的所有物件。
应用程序级:如果我们将资源定义在App.xaml 中,那么,就可以将资源套用到应用程序内的任何地方。
字典级:当我们把资源封装成一个资源字典, 定义到一个ResourceDictionary的XAML文件时,就可以在另一个应用程序中重复使用。
(2) 应用程序的功能:是否在运行时改变资源?
如果需要改变,则使用DynamicResource。
(3) 每个资源引用类型不同的寻找行为。(需要支持向前引用吗?)
StaticResources的适用场合:
(1)在资源第一次引用之后无需再修改资源的值。
(2)资源引用不会基于运行时的行为进行重新计算,比如在重新加载Page/Window的时候。
(3)当需要设置的属性不是DependencyObject或Freezable类型的时候,用StaticResource。
(4)当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享时,也使用StaticResource。
(5)当需要为一个自定义控件创建一个Theme,并Theme中使用资源,就需要使用StaticResource。因为StaticResource的资源查找行为时可预测的,并且本身包含在Theme中。而对于DynamicResource,即使资源是定义在Theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。
(6)当需要使用资源设置大量的依赖属性(Dependency Property)的时候。
由于依赖属性具有属性系统提供的值缓存机制,所以,如果能在程序装载时设置依赖属性的值,这样,依赖属性就不需要检查自己的值并返回最后的有效值了。
Dynamic Resource一般使用在如下场合:
(1)资源的值依赖一些条件,而该条件直到运行时才能确定。
包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和操作系统。
(2)为自定义控件引用或创建Theme Style。
(3)希望在程序运行期间调整资源字典的内容时。
(4)希望资源可以向前引用时(如上面在Canvas中引用innerLgbResource一样)
(5)资源文件很大,希望在运行时才加载。
(6)要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。
(7)当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。
Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的。
资源的查询方式
Static Resource的查询
(1)查找使用该资源的元素的Resource字典;
(2)顺着逻辑树向上查找父元素的资源字典,直到根节点;
(3)查找Application资源;
(4)不支持向前引用,即:不能引用在引用点之后才定义的资源。
Dynamic Resource的查询
(1)查找使用该资源的元素的Resource字典;
如果元素定义了一个Style 属性,将查找Style中的资源字典;如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典。
(2)顺逻辑树向上查找父元素的资源字典,直到根节点;
(3)查找Application资源;
(4)查找当前激活状态下的Theme资源字典;
(5)查找系统资源。
参考
用实例讲DynamicResource与StaticResource的区别
转载于:https://www.cnblogs.com/HQFZ/p/4205830.html
[WPF系列]-DynamicResource与StaticResource的区别相关推荐
- 一起学WPF系列(2):第一个WPF应用程序
概述 Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序.使用 WPF,您可以创建广泛的独立 ...
- WPF中ControlTemplate和DataTemplate的区别
原文:WPF中ControlTemplate和DataTemplate的区别 下面代码很好的解释了它们之间的区别: <Window x:Class="WPFTestMe.Window1 ...
- WPF系列教程——(一)仿TIM QQ界面 - 简书
WPF系列教程--(一)仿TIM QQ界面 - 简书 原文: WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM ...
- 贫民窟里的WPF系列讲座(一)
最近讲了一套完整的WPF课程,感觉教学效果还很不错.我准备给MSDN录15期左右的事情,这几篇文章是配合视频一起来看的.我相信大家都是很喜欢研究新技术的,但是研究新技术的时候会遇到很多困难,譬如书籍的 ...
- WPF、Windows Forms和Silverlight区别
转自:https://blog.csdn.net/bitfan/article/details/6128391 WPF.Windows Forms和Silverlight间的联系和区别 收到了一封学生 ...
- 贫民窟里的WPF系列讲座(二)
在初步了解了XAML之后,我们来稍微的了解一些枯燥的知识,我保证这一个系列的课程里只有这一节课是这样的.主要是这些概念太重要,后面的大量知识需要它们做前导.这里的详细内容可以可以看3月份我和任旻在微软 ...
- 为 Revit API 插件创建 WPF 窗口的基本项目(Revit API+WPF 系列 2/3)
在本系列的第二部分中,我们将讨论在创建 WPF 窗口时应用的基本项目. 为了继续,请确保您的插件项目能够创建 WPF 窗口.如果没有,您最好创建一个具有 WPF 功能的项目模板并创建另一个新项目.然后 ...
- WPF系列(二)数据转换
WPF中的依赖属性绑定对象时,如果数据类型不一致,会发生数据转换,比如int 转string 等,这些WPF会帮我们做好,但是如果是比较负杂的类型,比如bool类型转换成 Visibility,就不行 ...
- fx系列微型可编程控制器 通信_三菱Q系列和FX系列的PLC有什么区别?
点击上方" 技成培训 ",选择"置顶公众号" 17万+工控人关注的微信平台:技术分享.学习交流.工控视频 将三菱可编程控制器中使用的内置的输入输出继电器.辅助继 ...
最新文章
- Ubuntu 14.04.1 安装 python mysqldb
- APK在AndroidManifest.xml常用权限总结
- xtrabackup全量备份+binlog基于时间点恢复
- 自动控制matlab实验,自动控制matlab实验.doc
- 【渝粤教育】广东开放大学 土地力学与地基基础 形成性考核 (32)
- python polar函数_Python可视化很简单,可是你会吗?python绘制饼图、极线图和气泡图,让我来教教你吧,一文教会!!!...
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- 基于物理渲染的基础理论
- 【数据结构与算法基础】线性表
- (一)开机demo测试及测试流程
- 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
- ExtJs6 为Ext.Img对象添加单机事件
- AppCompatActivity设置透明主题
- 分享几个在记账本中快速删除收支明细的技巧
- 命名空间 namespace
- 学好MySQL增删查改,争取不做CURD程序员【上篇】
- 笔记本电脑键盘坏了,有密码应该如何打开?(生活小技巧)
- 高校社团管理系统jsp和javabean开发
- Pandas库入门详细教程
- lyse - Errors and Processes
热门文章
- Spring Ioc源码分析 之 Bean的加载(4):实例化Bean(createBeanInstance()方法)
- UNIX再学习 -- TCP/UDP 客户机/服务器
- 经验分享 | 通过adbd配置漏洞在安卓设备上提升权限
- android源码settings中显示所有正在运行进程流程分析
- Android 4.4 packageinstaller之权限获取及展现
- Linux 内核自解压流程分析
- 微博json文件_python 爬取微博评论 !
- ad中那个快捷键是重复上一部_十大快捷键:让PPT制作效率飞起!(附下载)
- dede问答模块 那个php文件相对重要,DEDE问答(ask)模块游客匿名提问和解答
- 用python排教室_开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”...