Dynamic Resource – 动态资源

与Static Resource不同的是,Dynamic Resource可以在程序运行时重新评估/计算资源来生成对应的对象/值,它支持向前引用,只要请求的key在整个应用程序内的任何Resources Dictionary定义过就可以被加载。如果有多个相同的key存在,则最后搜索到的资源为有效。

动态资源常用于以下情况:

·         资源直到运行时才能被取定其值的。这些包含想系统资源,或者通过用户交互/用户可以设定的值。例如你可以用Setter Property语法来引用一些系统资源像SystemColors, SystemFonts等,这些是真正的Dynamic Resource,因为他们是来自用户的运行环境。

·         在Custom control中有创建/引用主题风格的需求.

·         在运行过程中调整(比如添加或者合并)ReourceDictionary.

·         需要向前引用的场景。

·         创建的Style的值与当前用户设定的主题或其他设定有关的。

·         运行过程中可能更改逻辑树的次序的。

下面的代码片段演示了如何在XAML中引用SystemFonts,这需要用DynamicResource标记:

<Style x:Key="SimpleFont" TargetType="{x:Type Button}">

<Setter Property = "FontSize" Value= "{DynamicResource {x:Static SystemFonts.IconFontSizeKey}}"/>

<Setter Property = "FontWeight" Value= "{DynamicResource {x:Static SystemFonts.MessageFontWeightKey}}"/>

<Setter Property = "FontFamily" Value= "{DynamicResource {x:Static SystemFonts.CaptionFontFamilyKey}}"/>

</Style>

Dynamic Resource的查找行为

·         首先遍历请求对象本身定义的Resources集合。

·         然后遍历逻辑树上当前请求对象的父对象,直到遍历到Root(如Page.Reources, Window.Resources, UserControl.Resources等)

·         随后会遍历应用程序的Resources(即Application.Resources)

·         进而会Check当前激活的Theme的资源。

·         最后才会去遍历System Resources.

在程序中你可以通过myWindow.Resources[“key”]的方式来直接访问一个资源。另外,WPF还提供了TryFindResource(key)和FindResource(key)来支持资源搜索。FindResource方法在没找到资源的情况下会触发ResourceReferenceKeyNotFoundException异常。

其实通过上边的示例我们可以很清楚的看到,在使用静态资源的地方我们往往都可以使用动态资源,他们并没有什么合适与否之说,而选择它们中的哪一个,完全取决于你是否需要资源的使用者发现更新。我们可以再来比较一下二者的区别:

·         对于资源的更新会反映在那些使用了动态资源的元素上,这是他们最主要的区别。

·         性能上:因为动态资源要跟踪变化,所以需要占用更多的资源。而静态资源往往是在window或page加载之后来引用,动态资源会改善加载时间。但静态资源在使用时却会有些许性能的提升。

·         动态资源只能设置依赖属性只,而静态资源可以在任何地方使用。比如,我们可以声明一个逻辑资源把它当作一个元素来用,而动态资源却无法做到:

<Window x:Class="WpfApplication1.Window3"   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window3" Height="300" Width="300">

<Window.Resources>

<Button Background="Blue"  Margin="5" Height="28" x:Key="prev">

<Image Height="21" Source="Images\previous.gif"></Image>

</Button>

</Window.Resources>

<Grid>

<Button Height="20" Width="70" Content="Content" />

<StaticResource ResourceKey="prev" />

</Grid>

</Window>

  Dynamic Resource – 动态资源

与Static Resource不同的是,Dynamic Resource可以在程序运行时重新评估/计算资源来生成对应的对象/值,它支持向前引用,只要请求的key在整个应用程序内的任何Resources Dictionary定义过就可以被加载。如果有多个相同的key存在,则最后搜索到的资源为有效。

动态资源常用于以下情况:

·         资源直到运行时才能被取定其值的。这些包含想系统资源,或者通过用户交互/用户可以设定的值。例如你可以用Setter Property语法来引用一些系统资源像SystemColors, SystemFonts等,这些是真正的Dynamic Resource,因为他们是来自用户的运行环境。

·         在Custom control中有创建/引用主题风格的需求.

·         在运行过程中调整(比如添加或者合并)ReourceDictionary.

·         需要向前引用的场景。

·         创建的Style的值与当前用户设定的主题或其他设定有关的。

·         运行过程中可能更改逻辑树的次序的。

下面的代码片段演示了如何在XAML中引用SystemFonts,这需要用DynamicResource标记:

<Style x:Key="SimpleFont" TargetType="{x:Type Button}">

<Setter Property = "FontSize" Value= "{DynamicResource {x:Static SystemFonts.IconFontSizeKey}}"/>

<Setter Property = "FontWeight" Value= "{DynamicResource {x:Static SystemFonts.MessageFontWeightKey}}"/>

<Setter Property = "FontFamily" Value= "{DynamicResource {x:Static SystemFonts.CaptionFontFamilyKey}}"/>

</Style>

Dynamic Resource – 动态资源的更多相关文章

  1. WPF 用代码调用dynamic resource动态更改背景 - CSDN博客

    原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: <Button Click=&qu ...

  2. Spark动态资源分配-Dynamic Resource Allocation

    微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理.OLAP分析与可视化平台 | 赞助作者:赞助作者 Spark动态资源分配-Dynamic Resource Allocation S ...

  3. 静态资源(StaticResource)和动态资源(DynamicResource)

    静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用.这是通过使用 StaticResource 标记扩展或 DynamicRe ...

  4. spark动态资源(executor)分配

    spark动态资源调整其实也就是说的executor数目支持动态增减,动态增减是根据spark应用的实际负载情况来决定. 开启动态资源调整需要(on yarn情况下) 1.将spark.dynamic ...

  5. Liferay 6.2 改造系列之十一:默认关闭CDN动态资源

    在行业客户中,一般无法提供CDN服务,因此默认关闭CDN动态资源功能: 在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # ...

  6. nginx+tomcat集群配置(2)---静态和动态资源的分离

    前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx ...

  7. Centos7-yum部署配置LAMP-之LAMP及php-fpm实现反代动态资源

    一.简介 LAMP:linux+apache+mysql(这里用mariadb)+php(perl,python) LAMMP:memcached缓存的 CGI:Common Gateway Inte ...

  8. 关于PDA、GPS等动态资源的几种GIS解决方案

    关于PDA.GPS等动态资源的几种GIS解决方案(原创) 今年来GIS发展迅速,特别是实时监控中引入了GPS,PDA等动态资源,使得GIS在各个行业的应用更为广泛. 1.在这些动态资源资源的监控中主要 ...

  9. servlet基本原理(手动创建动态资源+工具开发动态资源)

    一.手动开发动态资源 1 静态资源和动态资源的区别 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源. 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变. <scr ...

随机推荐

  1. Selenium2+python自动化(学习笔记3)

    1.加载firefox配置 参考代码: # coding=utf-8from selenium import webdriver# 配置文件地址,打开Firefox点右上角设置--帮助--故障排除信息 ...

  2. github 获取repo 发布的版本号

    获取最新版本 https://api.github.com/repos/nickchou/paopao/releases/latest 获取版本列表 https://api.github.com/re ...

  3. 记录: 百度webuploader 分片文件上传java服务器端(spring mvc)示例的优化

    最近项目上用到文件分片上传,于是找到了百度的一个开源前端控件webuploader. 于是尝试使用. 下载下来后,它提供的服务器端示例代码是php版的,那么Java版的呢? 其实,上传文件都是按照rf ...

  4. 前端优化 -- Combo Handler

    Combo Handler来合并CSS/JS文件 背景 Combo Handler是Yahoo!开发的一个Apache模块,它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件, ...

  5. Google Cloud服务免费申请试用以及使用教程

    简介 Google Cloud Platform lets you build and host applications and websites, store data, and analyze ...

  6. luogu P1336 最佳课题选择

    题目描述 Matrix67要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择.由于课题数有限,Matrix67不得不重复选择一些课题.完成不同课题的论文所花的时间不同.具体地说,对于某个课题i ...

  7. Autolayout 01

    Auto Layout Concepts auto layout的基本概念是constraint(约束).表示了你interface中的layout元素.例如,你可以创建一个约束来指定元素的宽度或者距 ...

  8. DedeCMS使用channelartlist循环,不能获取外部链接的解决办法

    Dede在制作下拉菜单时,可以使用channelartlist循环调用顶级栏目和子栏目,但该标签不能获取外部链接, 下拉菜单时一段代码搞定多个顶级栏目和子级栏目的同时输出. <div>   ...

  9. windows 网络编程[转]

    利用winsock编写网络应用程序服务端的步骤简述如下WSAStartup 初始化网络编程库 socket 创建套接字 bind 指定地址.端口,绑定套接字 listen 进入监听状态 accept ...

  10. 做dg时遇到的log_archive_dest、log_archive_dest_1、db_recovery_file_dest之间互相影响

    前提:归档开启.默认不指定归档文件夹. 今晚遇到客户那里设置了闪回区和log_archive_dest.不停库做DG时,无法指定log_archive_dest_n參数,巨坑. .实验了下.结论例如以 ...