WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?
什么叫WPF的资源(Resource)
资源是保存在可执行文件中的一种不可执行数据。WPF中资源用ResourceDictionary
类表示,这个类就是一个字典,字典的key和value都是object
类型。所以在WPF中,资源可以可以是图像、字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性。 也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。 静态资源(Static Resource),动态资源(Dynamic Resources)。这两者的区别是:静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改。 动态资源则是在运行时决定,当运行过程中真正需要时,才到资源目标中查找其值。因此,我们可以动态地修改它。由于动态资源的运行时才能确定其值,因此效率比静态资源要低。
在WPF中,StaticResource 和 DynamicResource 是用于引用资源(如样式、模板、颜色等)的两种方式。它们的主要区别在于资源的解析时机和适用场景。StaticResource静态资源只会被加载一次,在整个WPF的生命周期中不会再次修改。DynamicResource动态资源在运行时可随便变化的资源。
下面我们从资源的加载时机、性能和使用场景 三个方面依次介绍这两种资源。
StaticResource
加载时机:在 XAML 加载时(编译时)解析资源。
性能:性能较高,因为资源在加载时就被解析并固定下来。
适用场景:适用于资源在运行时不会发生变化的情况。
DynamicResource
加载时机:在运行时(需要时)解析资源。
性能:性能稍低,因为资源在运行时动态查找。
适用场景:适用于资源可能在运行时发生变化的情况,例如支持主题切换。
介绍完这两种资源的主要概念和区别之后,接下来我们就来介绍下,如何在WPF中使用这两种资源。
StaticResource
WPF中,静态资源可以定义在独立的xaml资源 文件中、可以定义在窗体的xaml文件中、可以定义在App.xaml全局文件、定义在控件模板或者样式中。
1、在独立的资源文件中定义xaml文件
我们定义一个单独的资源文件Res.xaml
,里面定义一个资源。内容 如下:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><SolidColorBrush x:Key="PrimaryBrush" Color="Blue"></SolidColorBrush>
</ResourceDictionary>
然后我们在MainWindow.xaml可以直接引用这个资源文件,然后使用这个静态资源PrimaryBrush
<Window.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Res.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary>
</Window.Resources>
<Grid><Button Content="test" Background="{StaticResource PrimaryBrush}"></Button>
</Grid>
2、在窗体的xaml文件中定义资源
我们在MainWindow.xaml中可以直接定义资源,然后引用。
<Window.Resources><ResourceDictionary><SolidColorBrush x:Key="PrimaryBrush" Color="Blue"></SolidColorBrush></ResourceDictionary>
</Window.Resources>
<Grid><Button Content="test" Background="{StaticResource PrimaryBrush}"></Button>
</Grid>
3、在App.xaml全局文件中定义资源
在App.xaml中定义的资源文件,可以在当前项目的任何地方直接引用。但是注意 ,第一种方法或者第二种方法也定义了相同key的静态资源,窗体中的定义和静态资源文件中的定义会覆盖App.xaml中定义的静态资源。
<Application.Resources><SolidColorBrush x:Key="PrimaryBrush" Color="Blue"></SolidColorBrush>
</Application.Resources>
4、在Style样式中定义资源
因为WPF的Style
类中有一个属性表示资源,所以我们可以为Style定义静态资源,然后再Style定义中使用静态资源。
<Style TargetType="{x:Type Button}"><Style.Resources><ResourceDictionary><SolidColorBrush x:Key="ButtonForegroundBrush" Color="Red" /></ResourceDictionary></Style.Resources><Setter Property="Foreground" Value="{StaticResource ButtonForegroundBrush}" />
</Style>
StaticResource资源的查找方式
假设我们在不同的位置定义了一个同名key的静态资源,当有控件引用这个静态资源的时候,该使用哪个呢?其实静态资源的查找是有一个固定顺序的,最先查找到谁,就用谁。
(1)查找使用该资源的元素的Resource字典;
(2)顺着逻辑树向上查找父元素的资源字典,直到根节点;
(3)查找Application资源(App.xaml资源);
x:Static
StaticResource主要用于引用 XAML文件中定义的资源(如颜色、样式、模板等),在xaml加载的时候解析。但是如果我的资源不是定义在资源文件中,而是定义在一个普通类中的静态字段,该如何引用了。这个时候x:Static就派上场了,x:Static用于引用静态字段、静态属性、常量或枚举值。
假设我们定义一个类:Constants
,里面有一个静态字段:AppTitle
public class Constants
{public const string AppTitle = "My Application";
}
在xaml中,我们可以直接通过x:Static引用这个资源。这里的local是一个命名空间的别名。
<Button Content="{x:Static local:Constants.AppTitle}"></Button>
DynamicResource
DynamicResource和StaticResource资源的定义方式都是一致的,唯一的不同就是,当资源内容被修改之后,静态资源引用的地方不会有任何变化。我们用下面的代码做演示:
<Window.Resources><ResourceDictionary><SolidColorBrush x:Key="PrimaryBrush" Color="Blue"></SolidColorBrush></ResourceDictionary>
</Window.Resources>
<StackPanel><Button Foreground="{StaticResource PrimaryBrush}">测试按钮</Button><Button Foreground="{DynamicResource PrimaryBrush}">测试按钮</Button><Button Click="Button_Click" Content="修改资源"/>
</StackPanel>
上面代码中有一个定义好的资源PrimaryBrush
,两个Button分别以静态方式和动态方式引用。在第三个按钮的点击事件中,我们修改以下资源内容,就会发现,只有动态资源引用的地方前景色发生了变化。
private void Button_Click(object sender, RoutedEventArgs e)
{this.Resources["PrimaryBrush"] = new SolidColorBrush(Colors.Red);
}
点击按钮后,执行效果如下:
原文链接:http://cshelloworld.com/home/detail/1910955200127045632
相关文章:
WPF静态资源StaticResource和动态资源DynamicResource有什么区别,x:Static又是什么意思?
什么叫WPF的资源(Resource) 资源是保存在可执行文件中的一种不可执行数据。WPF中资源用ResourceDictionary类表示,这个类就是一个字典,字典的key和value都是object类型。所以在WPF中,资源可以可以是图像、字符串等所有的任意CLR对象…...
vue3环境搭建、nodejs22.x安装、yarn 1全局安装、npm切换yarn 1、yarn 1 切换npm
vue3环境搭建 node.js 安装 验证nodejs是否安装成功 # 检测node.js 是否安装成功----cmd命令提示符中执行 node -v npm -v 设置全局安装包保存路径、全局装包缓存路径 在node.js 安装路径下 创建 node_global 和 node_cache # 设置npm全局安装包保存路径(新版本…...
配置HADOOP_HOME环境变量和maven_HOME环境变量
1.右击此电脑,选择“属性” 2.选择“高级系统配置” 3.选择“环境变量” 4.在“系统变量”下新建两个系统变量 注意:变量值要“浏览目录”选择你存放hadoop的文件和maven的文件 5.在“系统变量”里双击Path”,在里面新建两个变量...
计算机网络:实验五路由器的应用
实验五路由器的应用 1.1实验目的 掌握路由器的应用;熟悉路由器的基本配置方法。 1.2实验要求 学生提前准备好实验报告,预习并熟悉实验步骤;遵守实验室纪律,在规定的时冋内完成要求的内容。 1.3 实验内容与步骤 1、假设企业网…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS232接口测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——RS232接口测试 第四章 ATK-DLMP257B功能…...
考研单词笔记 2025.04.15
addition n添加,增加,加法 additional a附加的,额外的 in addition 另外;除此之外;加之 augment v增加,增强,提高 explode v急剧增长,爆炸,爆发,迸发 gr…...
zkmall模块商城:B2C 场景下 Vue3 前端性能优化的广度探索与实践
ZKmall作为面向B2C场景的模块化电商平台,其前端性能优化在Vue3框架下的实践融合了架构设计、渲染机制与业务特性,形成了一套多维度的优化体系。以下从技术实现与业务适配两个维度展开分析: 一、Vue3响应式系统深度适配 Proxy驱动的精准更新…...
WebSocket 技术详解
引言 在现代Web应用中,实时通信已经成为不可或缺的一部分。想象一下聊天应用、在线游戏、股票交易平台或协作工具,这些应用都需要服务器能够即时将更新推送给客户端,而不仅仅是等待客户端请求。WebSocket技术应运而生,它提供了一…...
微服务即时通信系统---(四)框架学习
目录 ElasticSearch 介绍 安装 安装kibana ES客户端安装 头文件包含和编译时链接库 ES核心概念 索引(Index) 类型(Type) 字段(Field) 映射(mapping) 文档(document) ES对比MySQL Kibana访问ES测试 创建索引库 新增数据 查看并搜索数据 删除索引 ES…...
日常记录-CentOS 9安装java17
文章目录 前言一、手动安装 Oracle JDK 17 或 OpenJDK 17(适合自定义路径)二、使用 CentOS 9 系统包安装 OpenJDK 17(简单稳定)三、使用 SDKMAN(管理多个版本)总结 前言 CentOS 9安装java17 一、手动安装 …...
Python 导出 PDF(ReportLab )
文章目录 1. ReportLab 使用1.1. 安装 ReportLab1.2. 创建 PDF 文件1.3. 使用文档模板 DocTemplate1.4. 使用页面模板 PageTemplate1.5. 继承 BaseDocTemplate1.6. 使用 SimpleDocTemplate1.7. 继承Canvas1.8. 直接使用Canvas 2. 字体与编码3. PLATYPUS - 页面布局和排版3.1. 设…...
私域运营的底层逻辑:从流量到留存的进阶之路
私域流量已成为企业营销的新战场,但盲目跟风只会事倍功半。 接下来,我将深入剖析私域运营的底层逻辑,从几个关键环节,助你构建高效稳定的私域体系。 一、价值优先:以用户需求为核心 私域运营并非简单的粉丝积累&…...
【数据结构 · 初阶】- 带头双向循环链表
目录 1.尾插 2.初始化 3.尾删、头插、头删 4.查找,返回 pos 指针 5.pos 前插入 优化头插,直接复用 优化尾插,直接复用 6.pos 位删除 头删尾删简化 7.销毁 整体代码 List.h List.c Test.c 循环:1.尾 next 指向哨兵位…...
Cube IDE常用快捷键
STM32CubeIDE常用快捷键 STM32CubeIDE快捷键很多,可以通过 Help > Show Active Keybindings… 查看当前可用快捷键;也可以在 Window > Preferences > General > Keys 中查看修改快捷键 快捷键快捷键说明Ctrl/注释行/取消注释行CtrlD删除行…...
C++开发中的DUMP文件:解决崩溃与性能问题的利器(全文字数2w+)
[外链图片转存中…(img-mf6LznjF-1744717065188)] 文章目录 前言为什么需要了解DUMPDUMP在C开发中的重要性 一、DUMP基础概念1. 什么是DUMP文件2. DUMP文件的类型3. DUMP文件的作用(1)调试程序崩溃(2)分析程序性能(3&a…...
Golang|接口并发测试和压力测试
文章目录 这里出现某些奖品和数据库中库存量不一致的问题原因就是在并发的情况下,sync.Map仍然会出现脏写问题,就是在同时操作下的操作覆盖问题可以先把数据放到channel里,然后用一个单一的协程负责读取channel并写入map...
解决 Maven 500 错误:无法传输 maven-metadata.xml 文件
在使用 Maven 构建和管理 Java 项目时,可能会遇到类似以下的错误信息: [WARNING] Could not transfer metadata com.ha:xxx-model:2025.0.1.SNAPSHOT/maven-metadata.xml from/to public (http://xxx.xx.xx.xx/repository/maven-public): status code: …...
鸿蒙应用开发—鸿蒙app一键安装脚本
背景 当鸿蒙App开发完后需要提测,如何将App文件发给QA安装测试,是一件麻烦事,因为鸿蒙App并不能像Android Apk那样可以直接安装到设备中,能想到的方式有: 直接叫测试拿手机过来安装让测试安装DevEco Studio 拉代码编…...
opencv二值化实验
二值化实验 1二值化说明2 阈值法(THRESH_BINARY)3.反阈值法(THRESH_BINARY_INV)4截断阈值法(THRESH_TRUNC)5 低阈值零处理(THRESH_TOZERO)6 超阈值零处理(THRESH_TOZERO_…...
3DGS之渲染管线
渲染管线(Rendering Pipeline)是计算机图形学中将三维场景转换为二维屏幕图像的核心流程,涉及CPU与GPU的分工协作。计算机图形学把渲染管线分为三个阶段:应用程序阶段、几何阶段、光栅化阶段。渲染管线的一般流程是:顶…...
C#设计模式-状态模式
状态模式案例解析:三态循环灯的实现 案例概述 本案例使用 状态模式(State Pattern) 实现了一个 三态循环灯 的功能。每点击一次按钮,灯的状态会按顺序切换(状态1 → 状态2 → 状态3 → 状态1...)ÿ…...
泛微相关文档以及相关安装包下载
泛微相关文档以及相关安装包下载 泛微相关安装包下载泛微相关安装包下载 泛微E10登录网址:https://www.e-cology.com.cn/login?service=https%3A%2F%2Fwww.e-cology.com.cn%2F Ecode使用说明:https://e-cloudstore.com/doc.html 泛微组件库:https://cloudstore.e-cology…...
软件包安装管理Gitlab
官方提供了非常详尽的系统及自动化脚本安装教程 Gitlab官网下载地址:https://gitlab.cn/install/ 1、安装配置 今天我们说一下包安装管理,这样方便我们自己更精确的制定符合我们自己需要的Gitlab仓库 配置:ubuntu2004(focal) 4C8G 下载程…...
在Java使用rest Client操作ES
1. 导入restClient依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency> 2. 了解ES核心客户端API 核心区别…...
深入解析Linux软件包管理:apt/yum源配置与Vim编辑器高效使用指南
一、Linux软件包管理与开发工具 1.软件包管理器与Linux软件生态 软件包管理器的作用与分类 什么是软件包? 在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于…...
小程序css实现容器内 数据滚动 无缝衔接 点击暂停
<view class"gundongBox"><!-- 滚动展示信息的模块 --><image class"imgWid" :src"imgurlgundong.png" mode"widthFix"></image><view class"gundongView"><view class"container&qu…...
记录 | Pycharm中如何调用Anaconda的虚拟环境
目录 前言一、步骤Step1 查看anaconda 环境名Step2 Python项目编译器更改 更新时间 前言 参考文章: 参考视频:如何在pycharm中使用Anaconda创建的python环境 自己的感想 这里使用的Pycharm 2024专业版的。我所使用的Pycharm专业版位置:【仅用…...
静态站点生成
以下是关于 静态站点生成(SSG) 的系统知识梳理,涵盖核心概念、核心实现、数据管理与优化等内容: 一、核心概念与优势 定义 静态站点生成(SSG)是在构建阶段预生成所有静态HTML文件的技术,用户访问时直接获取预渲染内容,无需服务器动态生成。 核心优势 性能卓越:CDN缓存…...
Android Jni(二)加载调用第三方 so 库
文章目录 Android Jni(二)加载调用第三方 so 库前置知识CPU架构 ABI 基本步骤1、将第三方 SO 库文件放入项目中的正确位置:2. 创建 JNI 接口3. 实现 JNI 层代码4、配置 CMake 常见问题解决1、UnsatisfiedLinkError:2、函数找不到&…...
解锁元生代:ComfyUI工作流与云原生后端的深度融合
目录 蓝耘元生代:智算新势力崛起 ComfyUI 工作流创建详解 ComfyUI 初印象 蓝耘平台上搭建 ComfyUI 工作流 构建基础工作流实操 代码示例与原理剖析 云原生后端技术全景 云原生后端概念解析 核心技术深度解读 蓝耘元生代中两者的紧密联系…...
LeetCode算法题(Go语言实现)_47
题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 ‘.’ 表示)和墙(用 ‘’ 表示)。同时给你迷宫的入口 entrance ,用 entrance [entrancerow, entrancecol…...
树莓派_利用Ubuntu搭建gitlab
树莓派_利用Ubuntu搭建gitlab 一、给树莓派3A搭建基本系统 1、下载系统镜像 https://cdimage.ubuntu.com/ubuntu/releases/18.04/release/ 2、准备系统SD卡 二、给树莓派设备联网 1、串口后台登录 使用串口登录后台是最便捷的,因为前期网络可能不好直接成功 默…...
vi(vim)编辑器和root用户与普通用户之间的转换
vim编辑器是vi编辑器的加强版,以vi为例: vi编辑器: vi编辑器可以编辑文件内容 如何进入vi编辑器? 语法: vi 文件路径 如何退出? 语法: wq:保存退出 w:保存 q&…...
【vscode】vscode链接关联github/gitlab
一、windows下载安装git Git - Downloading Package 二、配置Git的用户名和邮箱 Git Bash运行以下命令来配置Git的用户名和邮箱: git config --global user.name "你的用户名" git config --global user.email "你的邮箱地址" 生成本机秘钥…...
Redis面试问题缓存相关详解
Redis面试问题缓存相关详解 一、缓存三兄弟(穿透、击穿、雪崩) 1. 穿透 问题描述: 缓存穿透是指查询一个数据库中不存在的数据,由于缓存不会保存这样的数据,每次都会穿透到数据库,导致数据库压力增大。例…...
Web三漏洞学习(其一:文件上传漏洞)
靶场:云曦历年考核题 一、文件上传 在此之前先准备一个一句话木马 将其命名为muma.txt 23年秋期末考 来给师兄上个马 打开环境以后直接上传muma.txt,出现js弹窗,说明有前端验证 提示只能上传.png .jpg 和 .gif文件,那就把muma.txt的后缀…...
冲刺高分!挑战7天一篇nhanes机器学习SCI!DAY1-7
医学生集合啦,继续挑战 7天一篇nhanes机器学习SCI! Day 1 进展:确定选题、期刊、文献 前面挑战了一期NHANES机器学习,大家使用NHANES的发文章的热情,火爆程度远超想象!我在下面的评论区看到大家的学习欲…...
高并发三剑客-本地缓存之王Caffeine-01缓存应用
1 分布式缓存使用及导致的问题 1.1 hotkey典型业务场景 常规性hotkey:可以提前评估出hotkey的场景,比如:重要节假日、促销活动等 突发性hotkey:没法提前评估,突发性行为,比如:突然新闻、爆炸信息…...
基于Java,SpringBoot,Vue,HTML家政服务预约系统设计
摘要 本文聚焦于基于Java、SpringBoot、Vue和HTML技术的家政服务预约系统的设计与实现。该系统旨在为家政服务的供需双方搭建一个便捷、高效的在线交互平台。后端采用Java语言结合SpringBoot框架,充分利用SpringBoot的自动配置和快速开发特性,实现系统业…...
系统架构设计师:系统架构概述知识体系、考点详解、高效记忆要点、练习题并提供答案与解析
一、系统架构概述知识体系、考点详解 系统架构概述、定义与作用 1. 系统架构的定义与核心要素 系统架构是复杂系统的高层次组织结构,包含硬件/软件组件、交互关系、设计原则及演进策略。其核心要素包括: 构件与模式:现代架构三要素为构件…...
汽配快车道解决chrome backgroud.js(Service Worker) XMLHttpRequest is not defined问题
Chrome 扩展开发:Service Worker 中如何优雅地发送 HTTP 请求 在 Chrome 扩展开发中,Service Worker 是一个非常重要的部分,它可以帮助我们实现很多强大的功能。然而,如果你在 Service Worker 中尝试使用 XMLHttpRequest 来发送 …...
VMware Ubuntu挂载Windows机器的共享文件
https://www.dong-blog.fun/post/2029 在VMware Ubuntu中访问Windows共享文件夹:完整指南 在使用VMware运行Ubuntu虚拟机时,访问Windows主机上的文件是常见需求。本文将详细介绍如何通过网络共享方式,让Ubuntu虚拟机直接访问Windows主机的文…...
LeNet神经网络
一、LeNet概述 1. 历史地位 开创性模型:首个成功应用的卷积神经网络(1998年)应用场景:手写数字识别(MNIST数据集)、银行支票识别提出者:Yann LeCun团队(论文《Gradient-Based Lear…...
Visio绘图工具全面科普:解锁专业图表绘制新境界[特殊字符]
Visio绘图工具全面科普:解锁专业图表绘制新境界🌟 在信息爆炸的时代,清晰、直观地呈现复杂信息变得至关重要。无论是绘制流程图📊、组织结构图👥,还是规划网络拓扑🖧,一款强大的绘图…...
ECharts散点图-散点图3,附视频讲解与代码下载
引言: ECharts散点图是一种常见的数据可视化图表类型,它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图,包括图表效果预览、视频讲解及代码下载,让你轻松掌握…...
D3路网图技术文档
在本文档中,我们将探讨如何使用 D3.js,结合 SVG(可缩放矢量图形)和 Canvas,来实现高效、交互性强的路网图效果。D3.js 是一个强大的 JavaScript 数据可视化库,可以基于数据驱动文档对象模型(DOM…...
Unity 一些小功能(屏幕画画,)
利用 Line Renderer 实现屏幕画画并保存图片 // 当前正在绘制的 LineRendererprivate LineRenderer currentLineRenderer;// 用于保存所有笔触的列表private List<LineRenderer> allLineRenderers new List<LineRenderer>();// 当前笔触顶点计数器private int ve…...
列表、字符串、heapq堆对列算法
1、列表 1.1 访问最后一个元素 list [1, 2, 3, 4, 5, 6] print(list[-1]) # 61.2 访问列表指定范围,例如第1-4个元素 print(list[0, 4]) # [1, 2, 3, 4]1.3 将字符列表以字符串形式输出 list [h, e, l, l, o] ls "".join(list) print(ls) # "…...
实战指南:封装Whisper为FastAPI接口并实现高并发处理
下面给出一个详细的示例,说明如何使用 FastAPI 封装 OpenAI 的 Whisper 模型,提供一个对外的 REST API 接口,并支持一定的并发请求。 下面是主要步骤和示例代码。 1. 环境准备 Python 环境: 建议使用 Python 3.8。依赖库&#x…...
Arm系统ubuntu20.04中自带的火狐浏览器打开网页B站视频和百度网盘网页视频,视频无法打开,并且没有声音——(本质上解决)
自己工作过程中有一台Orin nx arm设备,所以希望能够用这台设备看视频学习,发现自带的firefox打开网页版百度网盘和B站的时候无法打开视频,而且用有线耳机发现没有声音,最后换掉浏览器,用Chromium。 1、如果还想继续用…...