(六)WPF - 资源和样式行为(1)

一、资源

1、资源集合

每个元素都有一个 Resources 属性,该属性存储了一个资源字典集合(它是 Resource Dictionary 类的实例)。资源集合可以包含任意类型的对象,并根据字符串编写索引。

为了使用 XML 标记中的资源,需要一种引用资源的方法。这是通过标记扩展完成的。
有两个标记扩展可供使用:一个用于动态资源,另一个用于静态资源。

静态资源: 在第一次创建窗口时一次性地设置完毕。
动态资源: 如果发生了改变,则会重新应用资源。

2、资源的层次

每个元素都有自己的资源集合,并且为了找到期望的资源, WPF 在元素树中进行递归搜索。

使用静态资源时,必须总是在引用资源之前在标记中定义资源。

<Window.Resources>
<ImageBrush x:Key="TileBrush" TileMode="Tile"
			ViewportUnits="Absolute" Viewport" 0 0 32 32"
			ImageSource = "happyface.jpg" opacity="0.3"></ImageBrush>
</Window.Resources>
....

3、访问二进制资源

二进制资源如图片等信息。

<Image Height="21" Source="test.png"

System.Windows.Controls.Image 是一种很方便的访问每一个二进制图像的控件。
Image 类有一个 Source 属性,类型是 System.Windows.Media.ImageSource。

如果把资源变为松散文件,不想把它加入到项目中来。
<Image Height="21" Source="c:\User\Adam\Doucments\test.png"/>
从部署位置访问资源
<Image Height="21" Source="pack://application:,,,/Resources/Image/test.png"/>
<Image Height="21" Source="pack://siteOfOrigin:,,,/Resources/Image/test.png"

4、静态资源和动态资源

WPF 提供了两种访问逻辑资源的方式:

  • 一种静态的,由 StaticResource 实现,这种资源仅会被应用一次(第一次需要资源时加载)。
  • 一种是动态资源,由 DynamicResource 实现,这种资源每次更改时都会被重新应用。

两者区别:

  • 静态资源只从资源集合中获取对象一次。

  • 动态资源在每次需要对象时都会重新从资源集合中查找对象。

  • 动态资源需要占用更多的资源。

  • 使用动态资源可以改善加载时间,对静态资源的引用总是发生在 Window 或 Page 加载之后,而对动态资源的引用要到实际使用时才会生效。

  • 动态资源只能用于设置依赖属性值,而静态资源可以在任何地方使用。

  • 静态资源必须在 XMAL 文件中声明之后才可以使用,而动态资源没有限制。

第一次加载时的性能:

  • 动态资源在第一次使用它们时加载,而静态资源总是在创建窗口时加载。(因此,动态资源还被用于提高第一次加载时的性能)

明显的例子:
当创建依赖于 Windows 设置(例如系统颜色)的资源时。对于这种情况,如果希望能够相应当前颜色方案的任何改变,就需要使用动态资源。否则,如果使用静态资源,将仍然使用原来的颜色方案,直到用户重新启动应用程序为止。

使用动态属性时:

  • 资源具有依赖于系统设置的属性(如当前 Windows 操作系统的颜色或字体)。
  • 计划通过编程替换资源对象(例如,实现几类动态皮肤特性。)

5、非共享资源

当在多个地方使用某种资源时,使用的是同一个对象实例。这种行为——被称为共享。
而希望解释器在每次使用时创建单独的对象实例,就要关闭共享行为。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值