探讨:
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的区别相关推荐

  1. 一起学WPF系列(2):第一个WPF应用程序

    概述 Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序.使用 WPF,您可以创建广泛的独立 ...

  2. WPF中ControlTemplate和DataTemplate的区别

    原文:WPF中ControlTemplate和DataTemplate的区别 下面代码很好的解释了它们之间的区别: <Window x:Class="WPFTestMe.Window1 ...

  3. WPF系列教程——(一)仿TIM QQ界面 - 简书

    WPF系列教程--(一)仿TIM QQ界面 - 简书 原文: WPF系列教程--(一)仿TIM QQ界面 - 简书 TIM QQ 我们先来看一下TIM QQ长什么样,整体可以将界面分为三个部分 TIM ...

  4. 贫民窟里的WPF系列讲座(一)

    最近讲了一套完整的WPF课程,感觉教学效果还很不错.我准备给MSDN录15期左右的事情,这几篇文章是配合视频一起来看的.我相信大家都是很喜欢研究新技术的,但是研究新技术的时候会遇到很多困难,譬如书籍的 ...

  5. WPF、Windows Forms和Silverlight区别

    转自:https://blog.csdn.net/bitfan/article/details/6128391 WPF.Windows Forms和Silverlight间的联系和区别 收到了一封学生 ...

  6. 贫民窟里的WPF系列讲座(二)

    在初步了解了XAML之后,我们来稍微的了解一些枯燥的知识,我保证这一个系列的课程里只有这一节课是这样的.主要是这些概念太重要,后面的大量知识需要它们做前导.这里的详细内容可以可以看3月份我和任旻在微软 ...

  7. 为 Revit API 插件创建 WPF 窗口的基本项目(Revit API+WPF 系列 2/3)

    在本系列的第二部分中,我们将讨论在创建 WPF 窗口时应用的基本项目. 为了继续,请确保您的插件项目能够创建 WPF 窗口.如果没有,您最好创建一个具有 WPF 功能的项目模板并创建另一个新项目.然后 ...

  8. WPF系列(二)数据转换

    WPF中的依赖属性绑定对象时,如果数据类型不一致,会发生数据转换,比如int 转string 等,这些WPF会帮我们做好,但是如果是比较负杂的类型,比如bool类型转换成 Visibility,就不行 ...

  9. fx系列微型可编程控制器 通信_三菱Q系列和FX系列的PLC有什么区别?

    点击上方" 技成培训 ",选择"置顶公众号" 17万+工控人关注的微信平台:技术分享.学习交流.工控视频 将三菱可编程控制器中使用的内置的输入输出继电器.辅助继 ...

最新文章

  1. Ubuntu 14.04.1 安装 python mysqldb
  2. APK在AndroidManifest.xml常用权限总结
  3. xtrabackup全量备份+binlog基于时间点恢复
  4. 自动控制matlab实验,自动控制matlab实验.doc
  5. 【渝粤教育】广东开放大学 土地力学与地基基础 形成性考核 (32)
  6. python polar函数_Python可视化很简单,可是你会吗?python绘制饼图、极线图和气泡图,让我来教教你吧,一文教会!!!...
  7. IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
  8. 基于物理渲染的基础理论
  9. 【数据结构与算法基础】线性表
  10. (一)开机demo测试及测试流程
  11. 单片机C语言步进电机实训报告,单片机实验报告步进电机.doc
  12. ExtJs6 为Ext.Img对象添加单机事件
  13. AppCompatActivity设置透明主题
  14. 分享几个在记账本中快速删除收支明细的技巧
  15. 命名空间 namespace
  16. 学好MySQL增删查改,争取不做CURD程序员【上篇】
  17. 笔记本电脑键盘坏了,有密码应该如何打开?(生活小技巧)
  18. 高校社团管理系统jsp和javabean开发
  19. Pandas库入门详细教程
  20. lyse - Errors and Processes

热门文章

  1. Spring Ioc源码分析 之 Bean的加载(4):实例化Bean(createBeanInstance()方法)
  2. UNIX再学习 -- TCP/UDP 客户机/服务器
  3. 经验分享 | 通过adbd配置漏洞在安卓设备上提升权限
  4. android源码settings中显示所有正在运行进程流程分析
  5. Android 4.4 packageinstaller之权限获取及展现
  6. Linux 内核自解压流程分析
  7. 微博json文件_python 爬取微博评论 !
  8. ad中那个快捷键是重复上一部_十大快捷键:让PPT制作效率飞起!(附下载)
  9. dede问答模块 那个php文件相对重要,DEDE问答(ask)模块游客匿名提问和解答
  10. 用python排教室_开学季,教你用Python画大学教室座位神分区图!网友直呼“中枪”...