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

  • 相关阅读:
    爬虫1:get请求的翻页及思考
    Selenium终极自动化测试环境搭建(一) Selenium+Eclipse+Junit+TestNG
    理解RESTful架构(转)
    vue-devtools(vue 2.0)手动安装与使用 ? 如何处理Vue.js is detected on this page ?
    小程序开放更多连接能力
    vscode 开发工具
    video 在微信中,安卓全屏和ios上如何内联播放?H5同层播放器相关接入规范
    微信小程序<web-view>嵌入网页后,小程序如何和网页交互传值?
    SpringCloud(三) 微服务架构-微服务稳定性
    SpringCloud(二) 微服务架构-服务注册与发现
  • 原文地址:https://www.cnblogs.com/chuncn/p/1710651.html
Copyright © 2011-2022 走看看