zoukankan      html  css  js  c++  java
  • DynamicResource与StaticResource的区别

    资源的使用
     
    下面的示例在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的

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiangfengzhe/archive/2007/09/21/1795125.aspx

  • 相关阅读:
    109 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 05 问题解析--通过一个方法完成学生和专业的双向关联
    108 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 04 问题解析--数组未实例化造成的空指针异常
    107 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 03 编写方法完成学生个数统计功能
    106 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 02 新增属性完成学生信息存储
    105 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 01 新增需求及分析
    session与cookie的区别和联系
    session和cookie的区别
    Web服务器主动推送技术
    webSocket的场景应用
    TCP、Http和Socket 优劣比较
  • 原文地址:https://www.cnblogs.com/changbaishan/p/3406859.html
Copyright © 2011-2022 走看看