Dynamic Resource – 动态资源
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 – 动态资源的更多相关文章
- WPF 用代码调用dynamic resource动态更改背景 - CSDN博客
原文:WPF 用代码调用dynamic resource动态更改背景 - CSDN博客 一般dynamic resoource通常在XAML里调用,如下范例: <Button Click=&qu ...
- Spark动态资源分配-Dynamic Resource Allocation
微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理.OLAP分析与可视化平台 | 赞助作者:赞助作者 Spark动态资源分配-Dynamic Resource Allocation S ...
- 静态资源(StaticResource)和动态资源(DynamicResource)
静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用.这是通过使用 StaticResource 标记扩展或 DynamicRe ...
- spark动态资源(executor)分配
spark动态资源调整其实也就是说的executor数目支持动态增减,动态增减是根据spark应用的实际负载情况来决定. 开启动态资源调整需要(on yarn情况下) 1.将spark.dynamic ...
- Liferay 6.2 改造系列之十一:默认关闭CDN动态资源
在行业客户中,一般无法提供CDN服务,因此默认关闭CDN动态资源功能: 在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # ...
- nginx+tomcat集群配置(2)---静态和动态资源的分离
前言: 在web性能优化的领域, 经常能听到一个词, 就是静态/动态资源分离. 那静态/动态资源分离究竟是什么呢? 本文不讲文件系统服务, 云存储, 也不讲基于CDN的优化. 就简单讲讲基于nginx ...
- Centos7-yum部署配置LAMP-之LAMP及php-fpm实现反代动态资源
一.简介 LAMP:linux+apache+mysql(这里用mariadb)+php(perl,python) LAMMP:memcached缓存的 CGI:Common Gateway Inte ...
- 关于PDA、GPS等动态资源的几种GIS解决方案
关于PDA.GPS等动态资源的几种GIS解决方案(原创) 今年来GIS发展迅速,特别是实时监控中引入了GPS,PDA等动态资源,使得GIS在各个行业的应用更为广泛. 1.在这些动态资源资源的监控中主要 ...
- servlet基本原理(手动创建动态资源+工具开发动态资源)
一.手动开发动态资源 1 静态资源和动态资源的区别 静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源. 动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变. <scr ...
随机推荐
- android中与Adapter相关的控件----Spinner&AutoCompleteTextView
Spinner(列表选项框) & AutoCompleteTextView(自动完成文本框) 一.列表选项框核心属性 android:dropDownHorizontalOffset设置列表框 ...
- Akka之BackoffSupervisor
一.背景 最近在开发一个项目,项目的各模块之间是使用akka grpc传输音频帧的,并且各模块中的actor分别都进行了persist.本周在开发过程中遇到了一个bug,就是音频帧在通行一段时间后,整 ...
- jeesite导入数据库错误:java.sql.SQLException: Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD' for column 'name' at row 1问题解决
如果使用mvn antrun:run -Pinit-db进行数据库导入导致出现如下错误: 解决方法: 这个是由于新建数据库没有选择默认字符集导致的,只要选择utf-8即可.
- ios与js交互获取webview元素和赋值
使用webview的stringByEvaluatingJavaScriptFromString的方法交互,直接提供实例. 下载:http://download.csdn.net/detail/hey ...
- Android OkHttp经验小结
OkHttp应该是目前最完善,也是相当流行的一个底层网络请求库.Google都在用,所以有必要深入了解一下,刚好最近在重构公司项目的网络层,就顺便梳理一下.———–12.29————最近暂时没有时间详 ...
- 关于Android内存优化你应该知道的一切
介绍 在Android系统中,内存分配与释放分配在一定程度上会影响App性能的—鉴于其使用的是类似于Java的GC回收机制,因此系统会以消耗一定的效率为代价,进行垃圾回收. 在中国有句老话:”由俭入奢 ...
- Vagrant + PHPStorm 使用 Xdebug
PHPStorm设置 打开您的项目,一旦打开,转到首选项并在语言和框架> PHP分支下查找解释器. 使用解释器旁边的三个点按钮[...]添加一个新的解释器,这将打开一个新的选项窗口. 在新窗口的 ...
- Ubuntu免安装配置MySQL
1.下载mysql http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz 2.解压 ta ...
- circular-array-loop(蛮难的)
https://leetcode.com/problems/circular-array-loop/ 题目蛮难的,有一些坑. 前后两个指针追赶找环的方法,基本可以归结为一种定式.可以多总结. pack ...
- todo提纲
deep&wide为啥work,如何优化特征:详述attention,attention在ctr预估中如何使用,din为啥work?详述transformer,如何应用于ctr预估;item2 ...