资源的作用范围

书名:WPF专业编程指南
作者:李应保
出版社:电子工业出版社
出版时间:2010-01
ISBN:9787121100116


一、资源的作用范围

  • 前面提到,FramewrkElement和FrameworkContentElement中都含有Resources属性,而WPF中的UI元素都是从这两个类中派生出来的;换句话说,可以在任何UI元素内加入资源。
    WPF对其中的唯一要求是哈希表中的关键字Key必须是唯一的,在UI元素中使用关键字Key来引用资源。
    虽然在同一个元素的资源里,不能使用同一个关键字来定义不同的资源,但在不同的元素里,却可以使用其他元素资源中已经使用过的关键字。
    那么,在用关键字引用资源时,究竟是引用哪个资源呢?

二、例子

  • 把前面的例子稍微修改一下,在StackPanel中加入资源:
    <StackPanel.Resources>
            <SolidColorBrush x:Key =
  "YellowBrush">Blue</SolidColorBrush>
    </StackPanel.Resources>
  • 这里定义了关键字为“YellowBrush”的填充画刷,与Window中的一个画刷的关键字是相同的,但是所用的颜色不同,由于YellowBrush位于两个不同的UI元素中,编译程序并不产生任何错误。请看下面的XAML:
  <Window x:Class="Yingbao.Chapter8.StaticResourceExample.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="使用静态资源扩张的例子" Height="100" Width="400">
  <Window.Resources>
    <SolidColorBrush x:Key ="YellowBrush">Yellow</SolidColorBrush>
    <SolidColorBrush x:Key ="RedBrush">Red</SolidColorBrush>
    <sys:Double x:Key ="LargeFont">20</sys:Double>
    <sys:Double x:Key ="SmallFont">10</sys:Double>
  </Window.Resources>
  <StackPanel >
    <StackPanel.Resources>
      <SolidColorBrush x:Key ="YellowBrush">Blue</SolidColorBrush>
    </StackPanel.Resources>
    <Button Height ="30">
      <Button.Background>
        <StaticResource ResourceKey ="RedBrush"/>
      </Button.Background>
      <Button.FontSize>
        <StaticResource ResourceKey ="LargeFont"/>
      </Button.FontSize>
      红色大字按钮
    </Button>
    <Button Height ="30" Background ="{StaticResource YellowBrush}"
        FontSize ="{StaticResource SmallFont}">黄色小字按钮
    </Button>
  </StackPanel>
  </Window>
图8-9 使用静态资源扩展来访问静态资源
  • 这段程序的运行结果如图8-9所示。由图8-9可见,第二个按钮现在使用的是StackPanel中定义的资源,而不再是Window中定义的资源了。

三、传递和覆盖的规则

  • 资源在元素树中的传递和覆盖的规则与相关属性的传递和覆盖的规则一样:
    ● 资源从树根元素向树枝元素传递;
    ● 若资源在传递路径中被重新定义,则原来的资源就不再向下面的树杈传递,转而传递新定义的元素。

  • 需要注意的是,这里说的“传递”是一种通俗的说法。与传递事件真的在元素树中动态传递不同,资源的传递实际上发生在引用该资源的地方,WPF从该元素沿着元素树向树根寻找某个资源的过程。
    一旦找到了某个资源,WPF就使用该资源,而不再寻找了,虽然表面上看似乎是在“传递”和“覆盖”,但其内部的机理却大不相同。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 面试的时候总会遇到一些各种各样的面试题,而且这些面试题很多都是关于平时容易疏忽的理论方面的,所以整理一份Andro...
    hydCoder阅读 4,382评论 5 88
  • 性能改进 改进性能是此版本的一个重点所在。 除对提高内存和响应作出一些优化外,整个 JavaScript/Type...
    三梦哥阅读 3,847评论 0 3
  • 2.1 新建WPF项目 ### 略 2.2 剖析最简单的XAML代码 XAML是XML派生的 为了表示同类标签中的...
    北风知我意阅读 3,475评论 0 0
  • 最近看简书上一些面试题,抽时间整理了一份答案。 1、为什么说Objective-C是动态语言? 什么是动态语言: ...
    随意啊阅读 239评论 0 0
  • 一、与WPF结缘 第一次接触WPF是在2012年。学习了WinForm编程之后,了解到WPF这个非常先进的UI框架...
    金戈大王阅读 1,553评论 0 8

友情链接更多精彩内容