WPF中StaticResource和DynamicResource

news2024/10/22 7:46:03

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.coloradmin.cn/o/2220646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue--数据代理

Object.defineProperty const person {}; // 创建一个新对象 person.name‘xusx’ // 通过 defineProperty 使用数据描述符添加对象属性的示例 Object.defineProperty(person, “age”, { value: 37, // 默认值 writable: true, // 不可写 默认false enumerable: true, // 是…

【数据库系统概论】第3章 关系数据库标准语言SQL(一)数据定义(超详细)

教材&#xff1a; 数据库系统概论&#xff08;第6版&#xff09;王珊,杜小勇,陈红编著 目录 一、SQL概述 1.1 SQL 的产生与发展 1.2 SQL的特点 1.3 SQL的基本概念 二、数据定义 2.1 数据库的定义 2.2 数据表的定义 2.3 模式的定义 一、SQL概述 1974年IBM为关系DBMS设…

3.cpp基本数据类型

cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型&#xff1a;存储真值 true 或假值 false&#xff0c;C语言编译器C99以上支持。 C语言的bool类型&#xff1a;要添加 #include <stdbool.h>头文件 #includ…

【C++ 同余 裴蜀定理 中位数贪心 并集查找】2607. 使子数组元素和相等|2071

本文涉及知识点 C贪心 数论&#xff1a;质数、最大公约数、菲蜀定理 C图论 LeetCode2607. 使子数组元素和相等 给你一个下标从 0 开始的整数数组 arr 和一个整数 k 。数组 arr 是一个循环数组。换句话说&#xff0c;数组中的最后一个元素的下一个元素是数组中的第一个元素&a…

windows系统中,在cmd窗口演练 Redis 基本操作命令

文章目录 一、Redis 介绍1.1 Redis 的应用场景1.2 Redis 的特点 二、Windows版Redis安装三、Redis Desktop Manager安装四、Redis 常用基本操作4.1 查看操作4.2 操作string类型的命令4.2.1 设置获取Key4.2.2 MSET&#xff08;Multi&#xff09;支持批量设置key、MGET支持批量获…

擎创科技声明

近日&#xff0c;我司陆续接到求职者反映&#xff0c;有自称是擎创科技招聘人员&#xff0c;冒用“上海擎创信息技术有限公司”名义&#xff0c;用“126.com”的邮箱向求职者发布招聘信息&#xff0c;要求用户下载注册APP&#xff0c;进行在线测评。 对此&#xff0c;我司郑重…

前端算法合集-2(含面试题-美团一面)

主要考察的就是数组扁平化,由浅入深吧 ①利用tostring()和split() let arr [1, 2, 3, [4, 5, 6], [7, 8, [9, 10, 11], 12], [13, 14, 15]] let newarrarr.toString().split(,) let numarrnewarr.map((item)>{itemNumber(item)return item }) console.log(numarr) ②利用…

【SpringCloud】Gateway微服务网关(gateway快速⼊⻔ 断⾔⼯⼚ 过滤器⼯⼚ 浏览器同源策略)

Gateway微服务网关 Gateway服务网关什么是Gateway网关&#xff1f;为什么需要网关&#xff1f; Gateway快速入门创建gateway服务&#xff0c;引入依赖编写配置文件yaml和路由规则重启测试 断言工厂过滤器工厂路由过滤器的种类请求头过滤器默认过滤器全局过滤器【可写自定义逻辑…

IT监控(基础篇):好的it监控系统具备什么特点?

好的IT监控系统&#xff0c;应该是什么样的呢&#xff1f; 在当今数字化时代&#xff0c;IT系统已成为企业运营的命脉。因此&#xff0c;一个高效、可靠的IT监控平台对于确保业务连续性和提高运维效率至关重要。那么&#xff0c;一个好的IT监控平台究竟应该具备哪些特点呢&…

Adobe Acrobat DC 打印PDF文件,没有打印出注释的解决方法

adobe acrobat在打印的时候&#xff0c;打印不出来注释内容&#xff08;之前一直可以&#xff0c;突然就不行&#xff09;&#xff0c;升级版本、嵌入字体等等都试过&#xff0c;也在Google找了半天和问了GPT也么找着办法。 无奈之下&#xff0c;自己通过印前检查&#xff0c;…

ARL 灯塔 | CentOS7 — ARL 灯塔搭建流程(Docker)

关注这个工具的其它相关内容&#xff1a;自动化信息收集工具 —— ARL 灯塔使用手册 - CSDN 博客 灯塔&#xff0c;全称&#xff1a;ARL 资产侦察灯塔系统&#xff0c;有着域名资产发现和整理、IP/IP 段资产整理、端口扫描和服务识别、WEB 站点指纹识别、资产分组管理和搜索等等…

Elasticsearch是做什么的?

初识elasticsearch 官方网站&#xff1a;Elasticsearch&#xff1a;官方分布式搜索和分析引擎 | Elastic Elasticsearch是做什么的&#xff1f; Elasticsearch 是一个分布式搜索和分析引擎&#xff0c;专门用于处理大规模数据的实时搜索、分析和存储。它基于 Apache Lucene …

Spring MVC 原理与源码

Spring MVC 整体代码量有 5w 行&#xff0c;通过本专栏&#xff0c;可以快速的研读核心部分的代码&#xff0c;节省你的时间。 DispatcherServlet 的流程处理如下图&#xff1a; 但是随着前后端分离&#xff0c;后端大多提供 Restful API &#xff0c;里面的 ViewResolver 和 …

监控易监测对象及指标之:Kafka中间件JMX监控指标解读

监控易作为一款功能强大的监控软件&#xff0c;旨在为企业提供全方位的IT系统监控服务。其中&#xff0c;针对Kafka中间件的JMX监控是监控易的重要功能之一。本文将详细解读监控易中Kafka的JMX监控指标&#xff0c;帮助企业更好地理解并运用这些数据进行系统性能调优和故障排查…

onlyoffice docker启用jwt并生成jwt

一、说明 本文是docker教程&#xff0c;linux/win的安装版本也类似&#xff0c;只需要修改配置文件中的secrt就可以了【Configuring JWT for ONLYOFFICE Docs - ONLYOFFICE】 二、正文开始 docker启动时候如果不想使用jwt&#xff0c;加上参数-e JWT_ENABLEDfalse就可以了&…

软件I2C的代码

I2C的函数 GPIO的配置——scl和sda都配置为开漏输出 void MyI2C_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruture;GPIO_InitStruture.GPIO_Mode GPIO_Mode_Out_OD;GPIO_InitStruture.GPIO_PinGPIO_Pin_10 | GPIO_Pin_…

Maven 项目管理工具

目录 Maven简介 Maven快速上手 Maven详细介绍 Maven工作机制 Maven安装及配置 使用IDEA创建Maven Web工程 Maven简介 Maven是 Apache 开源组织奉献的一个开源项目&#xff0c;可以翻译为“专家”或“内行”。 Maven 的本质是一个项目管理工具&#xff0c;将项目开发和管…

Ansible自动化工具

一、Ansible概述 1.1 什么是Ansible Ansible 是一个开源的自动化工具&#xff0c;用于配置管理、应用程序部署和任务自动化。它让你可以通过编写简单的 YAML 文件&#xff08;剧本&#xff0c;Playbooks&#xff09;&#xff0c;轻松管理和配置多个服务器。Ansible 的特点是无…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

Rust语言编程环境的安装

简介 Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。 Rust语言的特点 系统级编程:Rust语言非常适合进行底层系统级编程,如操作系统、网络协议栈、设备驱动程序等。 内存安全:Rust使用所有权(ownership)系统来…