StaticResource(静态资源)与DynamicResource(动态资源)(WPF)

本文详细介绍了WPF中的StaticResource和DynamicResource,包括资源定义、范围、应用场景和查询方式。StaticResource在程序加载时一次性使用,适合静态不变的资源;DynamicResource在运行时动态查找和更新,适用于需要变化的资源。文章通过示例展示了两者在资源查找路径和更新行为上的差异,为开发者选择合适资源引用方式提供了指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、资源(Resource)的定义

资源是保存在可执行文件中的一种不可执行数据。在WPF的资源中,几乎可以包含图像、字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性。
也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。

资源的范围(层级)
WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上。WPF中,资源定义的位置决定了该资源的可用范围。资源可以定义在如下范围中:

  1. 物件级:此时,资源只能套用在这个Object物件,或套用至该物件的子物件。
  2. 文件级:如果将资源定义在Window或Page层级的XAML档中,那么可以套用到这个文件中的所有物件。
  3. 应用程序级:如果我们将资源定义在App.xaml 中,那么,就可以将资源套用到应用程序内的任何地方。
  4. 字典级:当我们把资源封装成一个资源字典, 定义到一个ResourceDictionary的XAML文件时,就可以在另一个应用程序中重复使用。

每一个框架级元素( FrameworkElement 或者 FrameworkContentElement )都有一个资源属性。每一个在资源字典中的资源都有一个唯一不重复的键值(key),在标签中使用x:Key属性来标识它。
一般地,键值是一个字符串,但你也可以用合适的扩展标签来设置为其他对象类型。非字符键值资源使用于特定的WPF区域,尤其是风格、组件资源,以及样式数据等。

当资源被存储进资源词典后,我们可以通过两种方式来使用这些资源一一静态方式和动态方式。 Static指的是程序的非执行状态而 Dynamic指的是程序运行状态。对于资源的使用, Static 和 Dynamic也是这个意思。

静态资源( StaticResource) 指的是在程序载入内存时对资源的一次性使用,之后就不再去访问这个资源了:
动态资源( DynamicResource) 指的是在程序运行过程中仍然会去访问资源。动态资源强制在每次访问此类资源时都重新进行查找。所以动态资源需要使用的系统开销大于静态资源的系统开销。

如果你确定某些资源只在程序初始化的时候使用一次、之后不会再改变,就应该使用StaticResource,而程序运行过程中还有可能改变的资源应该以 DynamicResource 形式使用。

二、示例


        Title="test" Height="300" Width="300">
    <Window.Resources>
        <SolidColorBrush x:Key="ButtonBrush" Color="Red"/>
    </Window.Resources>

    <StackPanel>
        <Button Margin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值