XAML标记扩展(2)

一、DynamicResourceStaticResource的区别

1DynamicResourceStaticResource的总结

1StaticResources的适用场合:

1)在资源第一次引用之后无需再修改资源的值。

2)资源引用不会基于运行时的行为进行重新计算,比如在重新加载Page/Window的时候。

3)当需要设置的属性不是DependencyObjectFreezable类型的时候,用StaticResource

4)当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享时,也使用StaticResource

5)当需要为一个自定义控件创建一个Theme,并Theme中使用资源,就需要使用 StaticResource。因为StaticResource的资源查找行为时可预测的,并且本身包含在Theme中。而对于DynamicResource,即使资源是定义在Theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。

6)当需要使用资源设置大量的依赖属性(Dependency Property)的时候。由于依赖属性具有属性系统提供的值缓存机制,所以,如果能在程序装载时设置依赖属性的值,这样,依赖属性就不需要检查自己的值并返回最后的有效值了。

2DynamicResource一般使用在如下场合:

1)资源的值依赖一些条件,而该条件直到运行时才能确定。包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和操作系统。

2)为自定义控件引用或创建Theme Style

3)希望在程序运行期间调整资源字典的内容时。

4)希望资源可以向前引用时(如上面在Canvas中引用innerLgbResource一样)

5)资源文件很大,希望在运行时才加载。

6)要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。

7)当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的。

2、资源的查询方式

1Static Resource的查询

1)查找使用该资源的元素的Resource字典;

2)顺着逻辑树向上查找父元素的资源字典,直到根节点;

3)查找Application资源;

4)不支持向前引用,即:不能引用在引用点之后才定义的资源。

2Dynamic Resource的查询

1)查找使用该资源的元素的Resource字典;如果元素定义了一个Style 属性,将查找Style中的资源字典;如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典。

2)顺逻辑树向上查找父元素的资源字典,直到根节点;

3)查找Application资源;

4)查找当前激活状态下的Theme资源字典;

5)查找系统资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值