资源字典(ResourceDictionary)学习笔记

news/2025/10/31 16:04:17/文章来源:https://www.cnblogs.com/LunaNorth/p/19180292

1️⃣ 基础概念与用法

🔹 什么是 ResourceDictionary?

WPF(Windows Presentation Foundation) 中,ResourceDictionary(资源字典)是一种特殊的字典集合,用于集中管理可重用的资源,如:

  • 样式(Style
  • 模板(ControlTemplateDataTemplate
  • 画刷(Brush
  • 字体、颜色、动画等

这些资源可以在 XAML 中定义,并在整个应用程序或特定控件中多次引用,避免重复代码,提升可维护性。

💡 注意:ResourceDictionary 是 WPF 特有的概念,不属于 C# 基础集合类(如 Dictionary、Hashtable) ,它继承自 System.Windows.ResourceDictionary,主要用于 UI 资源管理。


🔹 基本语法与使用方式

✅ 在 XAML 中定义资源字典

<Window x:Class="MyApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="资源字典示例" Height="300" Width="400"><Window.Resources><!-- 定义一个画刷资源 --><SolidColorBrush x:Key="MainColorBrush" Color="DeepSkyBlue" /><!-- 定义一个按钮样式 --><Style x:Key="NiceButtonStyle" TargetType="Button"><Setter Property="Background" Value="{StaticResource MainColorBrush}" /><Setter Property="Foreground" Value="White" /><Setter Property="FontSize" Value="14" /></Style></Window.Resources><StackPanel Margin="20"><Button Content="使用资源样式的按钮" Style="{StaticResource NiceButtonStyle}" /><TextBlock Text="文字颜色也可用资源" Foreground="{StaticResource MainColorBrush}" /></StackPanel>
</Window>

✅ 在代码中访问资源(C#)

// 获取资源
var brush = (SolidColorBrush)this.Resources["MainColorBrush"];
myButton.Background = brush;// 添加资源(不常用,通常在 XAML 中定义)
this.Resources.Add("DynamicColor", new SolidColorBrush(Colors.Orange));

✅ 合并外部资源字典(推荐做法)

将资源抽离到独立文件,便于复用:

Themes/Colors.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><SolidColorBrush x:Key="PrimaryColor" Color="#FF3B87FF" /><SolidColorBrush x:Key="SecondaryColor" Color="#FFE0E0E0" />
</ResourceDictionary>

App.xaml 中合并

<Application x:Class="MyApp.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="Themes/Colors.xaml" /><ResourceDictionary Source="Themes/Styles.xaml" /></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

2️⃣ 进阶知识点

🔸 与普通 Dictionary 的区别

特性 ResourceDictionary Dictionary<TKey, TValue>
所属命名空间 System.Windows System.Collections.Generic
用途 WPF UI 资源管理 通用键值对存储
键类型 通常为 stringx:Key 任意泛型类型
线程安全 ❌ 非线程安全(仅限 UI 线程使用) ❌ 非线程安全(除非用 ConcurrentDictionary
性能 专为 XAML 解析优化,支持延迟加载 通用高性能哈希表
支持合并 ✅ 支持 MergedDictionaries ❌ 不支持

⚠️ 重要ResourceDictionary 不是 C# 基础集合,不能用于普通数据存储!


🔸 性能与加载机制

  • 延迟加载(Lazy Loading) :资源在首次被引用时才真正创建,提升启动速度。

  • 查找顺序:WPF 按照以下顺序查找资源:

    1. 当前元素的 Resources
    2. 父容器的 Resources
    3. 应用程序级 App.xaml 中的资源
    4. 系统主题资源
  • 避免重复定义:相同 x:Key 的资源后定义的会覆盖先定义的。


🔸 动态资源 vs 静态资源

类型 语法 特点
StaticResource {StaticResource MyBrush} 编译时绑定,资源必须已存在,性能高
DynamicResource {DynamicResource MyBrush} 运行时绑定,资源可动态更改,性能略低

✅ 适合用 DynamicResource 的场景:

  • 主题切换(如亮色/暗色模式)
  • 运行时修改资源(如用户自定义配色)

3️⃣ 实际工作中的使用场景

🎯 虽然你提到了“哪些场景适合用 Stack 解决”,但 ResourceDictionary 与 Stack 用途完全不同。这里我们聚焦于 ResourceDictionary 的典型业务场景

🌈 场景 1:统一 UI 风格(设计系统)

  • 将颜色、字体、间距等设计规范定义为资源
  • 所有按钮、文本框等控件引用同一套资源
  • 好处:修改一处,全局生效
<!-- Colors.xaml -->
<SolidColorBrush x:Key="BrandPrimary" Color="#0078D7" />
<FontFamily x:Key="AppFont">Segoe UI</FontFamily><!-- Button.xaml -->
<Style TargetType="Button"><Setter Property="Background" Value="{StaticResource BrandPrimary}" /><Setter Property="FontFamily" Value="{StaticResource AppFont}" />
</Style>

🌓 场景 2:多主题支持(亮色/暗色模式)

// 切换主题
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary { Source = new Uri("Themes/DarkTheme.xaml", UriKind.Relative) }
);

🧩 场景 3:模块化资源管理

  • 大型项目中,每个功能模块有自己的 ResourceDictionary
  • 通过 MergedDictionaries 按需加载,避免资源冲突

🌐 场景 4:本地化(配合字符串资源)

虽然 WPF 本地化通常用 .resx 文件,但也可将本地化字符串放入资源字典:

<ResourceDictionary><sys:String x:Key="SaveButtonText">保存</sys:String><sys:String x:Key="CancelButtonText">取消</sys:String>
</ResourceDictionary>

✅ 小结

项目 说明
本质 WPF 专用的 UI 资源容器
核心价值 复用 + 统一 + 维护性
关键技巧 使用 MergedDictionaries 拆分资源文件
避坑提醒 不要用于普通数据存储;注意 StaticResourceDynamicResource 区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951918.shtml

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

相关文章

2025年电子设备厂家年度排名推荐,幸运电子设备有限公司

在当今科技飞速发展的时代,电子设备的精准性、稳定性和创新性对于各个行业的重要性不言而喻。众多企业和科研机构在选购电子设备时,常常会面临 幸运电子设备有实力吗幸运电子设备的创新理念强吗 等诸多疑问。在此背景…

如何一句话证明你懂项目管理或当过项目经理?

项目管理的复杂,恰恰在于它需要在变化中找平衡。而项目管理的价值,也正在于把不确定的挑战,通过系统性的把控,一步步变成可落地、可交付的成果。计划就是用来被打破的——这大概是每个项目经理的痛。 在过去做项目…

linux 使用指南

编译方法:touch a.cpp gedit a.cpp g++ a.cpp -o a.exe -O2 -std=c++14 ./a.exe

2025年不锈钢带制造厂推荐:五大不锈钢带制造企业深度解析

TOP1推荐:深圳市富鹏达金属材料有限公司 评价指数:★★★★★ 口碑评分:98分 行业表现:A++++级 深圳市富鹏达金属材料有限公司电话号码:13556896920,自2008年成立以来,始终专注于金属材料领域,尤其在不锈钢带制…

10-30 题

10-30 题 Joke - 题目 - QOJ.ac 先把 \(q\) 按照 \(p\) 排序,这样不会影响答案。 先假设我们已知所有的 \(q_i\),怎么求合法 \(s\) 的方案数。考虑把 \((i,q_i)\) 画到二维平面上,那么我们可以画一条不降的折线表示…

微信支付经验总结

首先微信下载的几个证书需要区分好:apiclient_cert.p12( 证书 + 私钥 的 PKCS12 容器,win可以直接执行)、apiclient_cert.pem(商户API证书-公钥)、apiclient_key.pem(商户API证书-私钥)之前遇到前端那调微信支付…

2025年ITSM平台演进趋势与选型指南:大模型智能体引领、数据AI底座支撑、业务价值驱动运维决策

2025年ITSM平台演进趋势与选型指南:大模型智能体引领、数据AI底座支撑、业务价值驱动运维决策$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");2025年IT服务…

2025年专业三防漆厂家排名:三防漆厂商技术实力深度剖析

TOP1推荐:佛山市鲸鲨化工有限公司评价指数:★★★★★ 口碑评分:99分 行业表现:A+++++级佛山市鲸鲨化工有限公司成立于1961年,是新中国成立后全国早批集涂料、合成树脂和颜料的研发、生产、销售于一体的国家重点精…

国标GB28181算法算力平台EasyGBS录像 “罢工”?就因没注意这个默认设置!

国标GB28181算法算力平台EasyGBS录像 “罢工”?就因没注意这个默认设置!今天跟大伙儿唠个实用的——你们有没有在EasyGBS平台上设好录像计划,结果它就是不干活儿的情况?其实啊,问题出在一个特小的细节上,好多人都…

2025年度口碑好的尼龙垫块制造企业TOP5:探寻尼龙垫块生产厂的创新能力与服务态度

在橡塑科技领域,尼龙垫块凭借其独特的性能和广泛的应用,正受到越来越多企业的关注。对于像河北春源橡塑科技有限公司这样的企业而言,如何在竞争中脱颖而出,成为口碑好的尼龙垫块制造企业,创新能力与服务态度起着关…

电视剧推荐《脱轨》

作者:So_noSlack-2025.07.07说真的,这是我第一次写观后感,这部剧给我的感触很深,它是第一个让我感受到如此正向的价值观、世界观,这才是一部好剧真正的样子。 “脱轨”正如剧名一样,它讲述了江晓媛因为灯塔系统实…

国标GB28181算法算力平台EasyGBS构筑文物保护“技防”新基座的创新实践

国标GB28181算法算力平台EasyGBS构筑文物保护“技防”新基座的创新实践文物承载灿烂文明,传承历史文化,其保护工作至关重要。传统以“人防+物防”为主的文物保护模式,正面临响应延迟、监管盲区、效率低下等挑战。本…

(论文)Local Attention

(论文)Local Attention局部注意力方法 (Local attention,LA) 摘要: 主要研究了一些局部注意力的工作。 对于NLP,LA能够更好的外推;对于CV,能够更加高效。 作用不同,主要也是因为两者的关注目标,实现方法不同…

于鸿硕面向对象设计大作业02

面向对象设计大作业02 网安2411 于鸿硕 202421336018 一、改造思路 1.MVC模式 MVC模式 即Model-View-Controller(模型-视图-控制器)模式,通过分三种实现模块进行;对于本项目,设计MVC模式如下 graph TD M[Model]--…

2025年10月小学生学习机品牌评测:五强榜单性能与口碑全解析

开学季刚过,不少家长发现孩子在家预习、复习时容易走神,校内同步练习又缺互动,于是把“买一台适合小学生的学习机”提上日程。教育部《2024年全国中小学生视力情况专项报告》显示,小学生每天课外电子学习时长已升至…

2025 年 PCB 打板做板,PCBHDI 高密度互连板,PCB 电路板线路板厂家最新推荐,技术实力与市场口碑深度解析

引言 2025 年电子产业持续升级,PCB 作为核心载体,其品质与性能对下游产品至关重要。为精准筛选优质 PCB 厂家,某某电子产业协会联合专业测评机构开展权威测评,涵盖全国 120 余家 PCB 企业。测评从技术实力(工艺精…

【IEEE出版 | 连续六届稳定EI检索 | 往届快至会后3.5个月检索!】第七届电子工程与信息学国际学术会议(EEI 2025)

第七届电子工程与信息学国际学术会议(EEI 2025)将于2025年11月7日至11月9日在中国扬州隆重召开。【扬州大学主办,高品质会议,会议级别高】 【连续六届稳定EI检索, 往届快至会后3.5个月检索】 第七届电子工程与信息…

2025年10月小学生学习机品牌榜单:销量数据与功能对比全解析

孩子升入小学后,课本难度陡增、作业量加大,家长普遍面临“辅导时间不够、讲解方式不对、孩子坐不住”的三重焦虑。教育部《2024全国义务教育质量监测报告》显示,小学低年级学生每日课外学习时长已较三年前增加28分钟…

四大主流平台深度测评:2025企业自动化运维平台选型指南,自动化巡检平台适配关键场景

四大主流平台深度测评:2025企业自动化运维平台选型指南,自动化巡检平台适配关键场景$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");2025年企业IT运维面临…

【ACM出版 | ACM出版社目前快至见刊后1个月EI、Scopus检索】2025年数字化社会与智能计算国际学术会议 (ICDSIC 2025)

2025年数字化社会与智能计算国际学术会议(ICDSIC 2025)将于2025年11月21日至23日在中国广州举行。【本次ICDSIC2025已通过ACM申请,ISBN:979-8-4007-1964-6】 【ACM出版社目前快至见刊后1个月EI、Scopus检索】 2025…