WPF中StaticResource和DynamicResource

server/2024/10/22 9:23:17/

DynamicResource

在XAML中,StaticResource是一个标记扩展,它用于在XAML中引用页面的资源字典(ResourceDictionary)中定义的资源。资源可以是样式、画笔、控件模板、数据模板、字体族等任何对象。StaticResource允许你将这些资源应用到控件的属性上,从而实现样式和行为的复用。

以下是如何使用StaticResource的一个基本示例:

首先,你需要在XAML页面的资源部分定义一个资源,例如一个样式:

<Page.Resources><Style x:Key="HighlightStyle" TargetType="TextBlock"><Setter Property="Foreground" Value="Red"/><Setter Property="FontWeight" Value="Bold"/></Style>
</Page.Resources>

然后,在页面的任何地方,你可以通过StaticResource标记扩展引用这个样式,并将其应用到一个或多个TextBlock控件上:

<Page><Grid><TextBlock Text="This is a highlighted text." Style="{StaticResource HighlightStyle}" /></Grid>
</Page>

在这个例子中,TextBlock控件的Style属性被设置为一个静态资源,这个资源的键是"HighlightStyle",这是我们之前在资源字典中定义的样式的键。

StaticResource的使用有几个关键点:

  1. 资源查找:当XAML解析器遇到StaticResource时,它会在资源字典中查找具有指定键的资源。如果找到了,就会将该资源应用到相应的属性上。

  2. 性能:使用StaticResource时,资源在第一次被引用时会被解析,并且缓存起来。这意味着如果多个控件使用相同的资源,它们实际上引用的是同一个对象,这有助于节省内存。

  3. 线程安全:由于资源是在解析XAML时创建的,这意味着它们是在UI线程上创建的,因此在使用时不需要担心线程安全问题。

  4. 资源作用域:资源的作用域取决于它们被定义的位置。页面级的资源只能在该页面中使用,而应用级的资源(定义在App.xaml中)可以在整个应用程序中使用。

DynamicResource

在XAML中,动态绑定资源可以通过使用DynamicResource标记扩展来实现。这允许资源在运行时动态更改,而不是在编译时确定。动态资源的关键在于它们可以响应应用程序状态的变化而即时更新,从而提供更为灵活和响应式的用户界面。

以下是如何使用DynamicResource来动态绑定资源的示例:

  1. 首先,在资源字典中定义一个资源,可以是颜色、画笔、样式等:
<Window.Resources><SolidColorBrush x:Key="DynamicBrush" Color="Blue" />
</Window.Resources>
  1. 然后,在需要使用该资源的地方,使用DynamicResource标记扩展来引用它:
<Button Content="Click Me" Background="{DynamicResource DynamicBrush}" />

在这个例子中,按钮的背景颜色将被设置为在资源字典中定义的DynamicBrush资源。如果这个资源的值在运行时被更改,所有使用DynamicResource引用它的控件都会自动更新。

动态资源的查找行为是从控件开始向上查找,直到找到对应的资源为止。这意味着如果控件有自己的资源字典并且其中定义了同名的资源,那么这个资源将覆盖父容器中的同名资源。

如果你需要在运行时更改资源,可以这样做:

// 在某个事件处理器中
myButton.Background = (Brush)FindResource("DynamicBrush");

或者,如果你想要更改整个应用程序的资源,可以修改Application.Resources

Application.Current.Resources["DynamicBrush"] = new SolidColorBrush(Colors.Red);

这样,所有使用DynamicResource引用DynamicBrush的控件都会更新它们的背景颜色。

 


http://www.ppmy.cn/server/133856.html

相关文章

[AWS]RDS数据库版本升级

背景&#xff1a;由于AWS上mysql5.7版本不再支持&#xff0c;需要进行版本升级。 吐槽&#xff1a;每年都要来那么几次&#xff0c;真的有病一样&#xff0c;很烦。 步骤一、升级检查 AWS提供了一个python的升级检测脚本&#xff0c;可以按照一下脚本下载测试&#xff1a; [r…

快速排序.

文章目录 &#x1f34a;自我介绍&#x1f34a;快速排序快速排序的思想&#xff1a; &#x1f34a;代码演示 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &#x1f34a;自我介绍 Hello,大家好&…

基于SpringBoot+Vue+uniapp微信小程序的澡堂预订的微信小程序的详细设计和实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

探讨Node.js生态中的npm与npx工具

在Node.js生态中&#xff0c;npm和npx是两个重要的工具&#xff0c;它们的功能虽然有所重叠&#xff0c;但使用场景却不同。理解它们的区别可以帮助开发者更高效地管理项目依赖与执行工具。 npm与npx的区别 npm&#xff1a;主要用于管理项目依赖。通过 npm install&#xff0…

使用fpm工具制作Vim.rpm包

背景&#xff1a;生产环境中的CentOS 7在安全扫描中被扫描出vim存在堆缓冲区溢出&#xff08;CVE-2024-45306&#xff09;等漏洞。根据漏洞说明&#xff0c;需要升级到最新版。 奈何CentOS 7已经停止维护了&#xff0c;所以&#xff0c;想在网上找一个最新版的vim.rpm相当不容易…

【贪心算法】(第六篇)

目录 按⾝⾼排序&#xff08;easy&#xff09; 题目解析 讲解算法原理 编写代码 优势洗牌&#xff08;⽥忌赛⻢&#xff09;&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 按⾝⾼排序&#xff08;easy&#xff09; 题目解析 1.题目链接&#xff1a;…

【大模型实战篇】大模型分词算法WordPiece分词及代码示例

继《大模型数据词元化处理BPE(Byte-Pair Encoding tokenization)》之后&#xff0c;我们针对大模型原始数据的分词处理&#xff0c;继续分享WordPiece分词技术【1】。 1. 原理分析 WordPiece 是 Google 开发的分词算法&#xff0c;用于预训练 BERT。此后&#xff0c;它被多个基…

LED计数电路综合实验

一 实验目的 使用Logisim软件设计出以下 LED 计数电路并进行运行 二 电路功能分析 电路功能分析 &#xff08;1&#xff09;In5 为 1 时&#xff0c;会让 out1 ~ out5 均为 1&#xff0c;故点击 In5时&#xff0c;out1~out5 均会发亮。 &#xff08;2&#xff09;In4 为 1 时…