StaticResource和DynamicResource

翻译 2007年09月21日 18:07:00
 
DynamicResourceStaticResource的区别
 
资源的使用
 
下面的示例在page的根元素定义了一个SolidColorBrush画刷作为一个资源,并展示如何用它来设置Page中子元素的属性
<Page Name="root"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
<Page.Resources>
    <SolidColorBrush x:key=”MyBrush” Color=”Gold”/>
    <Style TargetType=”Border” x:Key=”PageBackground”>
       <Setter Property=”Background” Value=”Blue”/>
    </Style>
<Page.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="Gold"/>
    <Style TargetType="Border" x:Key="PageBackground">
      <Setter Property="Background" Value="Blue"/>
    </Style>
  
</Page.Resources>
 <StackPanel>
    <DockPanel>
        <Button DockPanel.Dock="Top" HorizontalAlignment="Left" Height="30" Background="{StaticResource MyBrush}" Margin="40">Button</Button>
              </DockPanel>
 </StackPanel>
</Page>
 
每个框架级别的元素(FrameworkElement或FrameworkContentElement)都有一个Resources属性,我们可以在任何元素上定义资源,不过习惯上在根元素上定义,如上面 的xmal代码中<Page.Resources/>定义资源。
       通过属性x:Key给每个资源赋予一个唯一的关键字。这样我们就可以在Xmal的其它地方通过Key值来操作对应的资源了。如下示例,使用资源给元素的属性赋值
<Button Background=”{StaticResource MyBrush}” />
 
StaticResource DynamicResource
 
资源可以被当作StaticResource和DynamicResource两种类型来引用。
 
当引用资源时,下面的考虑将影响你是选择StaticResource还是DynamicResource来它。
1〉 如何为应用程序创建资源(资源是在一个Page中,在APP范围还是在松散的Xaml中或仅仅在程序集中)
2〉 应用程序功能:是否在运行时改变资源
3〉 每个资源引用类型不同的寻找行为
StaticResources
StaticResources在如下情况下使用比较好
1〉 在资源第一次引用之后无需再修改资源的值
2〉 StaticResource引用不会基于运行时的行为进行重新计算。比如在重新加载Page的时候。
3〉 当需要设置的属性不是DependencyObject或Freezable类型的时候,需要用staticResource
4〉 当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享
5〉 当需要为一个自定义控件创建一个theme,并theme中使用资源,就需要使用StaticResource。因为StaticResource的资源查找行为时可预测的,并且本身包含在theme中。而对于DynamicResource,即使资源是定义在theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。
6〉 当需要使用资源设置大量的依赖属性的时候(dependency property),依赖属性具有属性系统提供的值缓存机制,所以如果能在程序装载时设置依赖属性的值,依赖属性就不需要检查自己的值并返回最后的有效值了。可以获得显示时的好处。
Static resource 查询行为
1〉 查找使用该资源的元素的resource字典
2〉 顺逻辑树向上查找父元素的资源字典,直到根节点
3〉 查找Application资源
4〉 不支持向前引用。即不能引用在引用点之后才定义的资源
 
Dynamic Resource
Dynamic resources一般使用在如下场合
1〉 资源的值依赖一些条件,而该条件直到运行时才能确定。这包括系统资源,或是用户可设置的资源。例如,可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,这些属性是动态的,他们的值来自于运行环境和操作系统
2〉 为自定义控件引用或创建theme style
3〉 希望在程序运行期间调整资源字典的内容
4〉 希望资源可以向前引用
5〉 资源文件很大,希望在运行时加载
6〉 要创建的style的值可能来自于其它值,而这些值又依赖于themes或用户设置
7〉 当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。
Dynamic resource 查询行为
1〉 查找使用该资源的元素的resource字典
如果元素定义了一个Style 属性,将查找Style中的资源字典
如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典
2〉 顺逻辑树向上查找父元素的资源字典,直到根节点
3〉 查找Application资源
4〉 查找当前激活状态下的theme资源字典。
5〉 查找系统资源
Dynamic resource的限制条件
1〉 属性必须是依赖属性,或是Freezable的
 
 
 

WPF的静态资源(StaticResource)和动态资源(DynamicResource)

静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用。这是通过使用 StaticResource 标记扩展或 DynamicR...
  • binbingg
  • binbingg
  • 2013年08月29日 11:21
  • 2740

WPF(Converter 练习[很详细])

  • haifengzhilian
  • haifengzhilian
  • 2013年04月09日 17:05
  • 9907

WPF 列表选择,动态调用ResourceDictionary内资源

做WPF项目经常会碰到让客户从列表中选择样式,选定后,动态更改部件的样式。下面以动态更改一个控件的背景图为例子来说说实现的方法。 如果大家有更好的方法,欢迎在评论中提出来。 控件的背景图使...
  • soft2buy
  • soft2buy
  • 2013年12月14日 16:03
  • 9913

WPF的静态资源(StaticResource)和动态资源(DynamicResource)

静态资源(StaticResource)和动态资源(DynamicResource) 资源可以作为静态资源或动态资源进行引用。这是通过使用 StaticResource 标记扩展或 DynamicR...
  • binbingg
  • binbingg
  • 2013年08月29日 11:21
  • 2740

StaticResource vs DynamicResource

StaticResource
  • chuwachen
  • chuwachen
  • 2014年08月18日 16:50
  • 451

WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)

一、WPF对象级(Window对象)资源的定义与查找 实例一:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/present...
  • tiz198183
  • tiz198183
  • 2017年02月13日 13:55
  • 748

WPF中静态资源(StaticResource)和动态资源(DynamicResource)的区别

一、文章概述 本演示介绍了WPF的静态资源和动态资源的基本使用,并对两者做了简单的比较。 静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资...
  • wxlinwzl
  • wxlinwzl
  • 2017年04月06日 10:53
  • 713

用实例讲DynamicResource与StaticResource的区别

下面用例子更详细地说明DynamicResource与StaticResource的区别。先看看这段XAML代码:// LinearGradientBrush.xaml    xmlns="http:...
  • gdpics
  • gdpics
  • 2011年05月29日 17:48
  • 109

谁说在运行时改变资源就要使用DynamicResource?

本文讨论StaticResource和DynamicResource众多区别中的一项——关于修改资源的问题。关于向前引用什么的问题,请参考Google。 ...
  • gqqnb
  • gqqnb
  • 2012年07月23日 20:07
  • 2673

WPF 绑定StaticResource到控件的方法

资源文件内的属性能否直接通过绑定应用到控件?答案是肯定的。 比如,我们要直接把下面的直接绑定到一个TextBlock的Foreground属性。     xmlns="http://schem...
  • soft2buy
  • soft2buy
  • 2011年11月10日 18:53
  • 6500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:StaticResource和DynamicResource
举报原因:
原因补充:

(最多只允许输入30个字)