WPF-- 合并资源字典
原文:WPF-- 合并资源字典
1. 合并多个外部资源字典成为本地字典
|
语言 |
XAML |
|
示例代码 |
<Page.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="myresourcedictionary1.xaml"/> <ResourceDictionary Source="myresourcedictionary2.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Page.Resources>
|
|
描述 |
合并多个外部资源字典成为本地字典。当需要合并更多字典的时候只要在ResourceDictionary.MergedDictionaries节中顺序增加引用。 |
|
特别提示 |
合并字典(MergedDictionaries 集合中的字典)中对同一对象的同一子元素进行定义的时候,会产生覆盖效果:在这种情况下,所返回的资源将来自在 MergedDictionaries 集合中最后一个找到的字典。(在这里会显示myresourcedictionary2.xaml中的定义)。 |
|
合并字典(MergedDictionaries 集合中的字典)中对同一对象的不同子元素定义的时候会产生叠加效果。 |
2.合并多个外部资源字典到本地字典
|
语言 |
XAML |
|
示例代码 |
<Page.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="myresourcedictionary1.xaml"/> <ResourceDictionary Source="myresourcedictionary2.xaml"/> </ResourceDictionary.MergedDictionaries>
<!--A Style that affects all TextBlocks--> <Style TargetType="…"> … </Style> … </ResourceDictionary> </Page.Resources>
|
|
描述 |
合并多个外部资源字典到本地字典。当需要合并更多字典的时候只要在ResourceDictionary.MergedDictionaries节中顺序增加引用。 |
|
特别提示 |
合并字典(MergedDictionaries 集合中的字典)中对同一对象的同一子元素进行定义的时候,会产生覆盖效果:在这种情况下,所返回的资源将来自在 MergedDictionaries 集合中最后一个找到的字典。(在这里会显示myresourcedictionary2.xaml中的定义)。 |
|
合并字典(MergedDictionaries 集合中的字典)中对同一对象的不同子元素定义的时候会产生叠加效果。 |
|
|
如果资源键在主字典以及合并字典(MergedDictionaries 集合中的字典)中均进行了定义,则所返回的资源将来自主字典。这些范围规则对于静态资源引用和动态资源引用同样适用。 |
3.合并外部字典同时对外部字典进行扩充或替代
|
语言 |
XAML |
|
示例代码 |
<Page.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="myresourcedictionary1.xaml"/> <ResourceDictionary> Source="myresourcedictionary2.xaml"> <!--A Style that affects all TextBlocks--> <Style TargetType="…"> … </Style> … </ResourceDictionary> </ResourceDictionary.MergedDictionaries>
</ResourceDictionary> </Page.Resources>
|
|
描述 |
合并外部字典同时对外部字典进行扩充或替代组合成本地字典。我们可以看到示例代码中红色的部分就是对外部字典myresourcedictionary2.xaml的一个扩充或者替代( 注意,这不是常见的方案,合并字典的主要方案是合并来自外部文件位置的资源。如果要在页面的标记内指定资源,则通常应当在主 ResourceDictionary(而不是合并字典)中定义这些资源。).当需要合并更多字典只要在MergedDictionaries集合中顺序增加引用。 |
|
特别提示 |
合并字典(MergedDictionaries 集合中的字典)中对同一对象的同一子元素进行定义的时候,会产生覆盖效果:在这种情况下,所返回的资源将来自在 MergedDictionaries 集合中最后一个找到的字典。(在这里会显示myresourcedictionary2.xaml中的定义)。 |
|
合并字典(MergedDictionaries 集合中的字典)中对同一对象的不同子元素定义的时候会产生叠加效果。 |
|
|
如果资源键在主字典以及合并字典(MergedDictionaries 集合中的字典)中均进行了定义,则所返回的资源将来自主字典。这些范围规则对于静态资源引用和动态资源引用同样适用。 |
4. 合并字典和代码
合并字典可以通过代码添加到 Resources 字典中。对于任何 Resources 属性存在的默认 ResourceDictionary(初始为空)还有一个默认的 MergedDictionaries 集合属性(初始为空)。若要通过代码添加合并字典,可以获取对所需的主 ResourceDictionary 的引用,获取它的 MergedDictionaries 属性值,针对包含在 MergedDictionaries 中的泛型 Collection 调用 Add。您添加的对象必须是新的 ResourceDictionary。在代码中,不需要设置 Source 属性,而必须通过创建或加载一个 ResourceDictionary 对象来获取该对象。加载现有 ResourceDictionary 的一种方法就是,针对具有 ResourceDictionary 根的现有 XAML 文件流调用 XamlReader..::.Load,然后将 XamlReader..::.Load 返回值强制转换为 ResourceDictionary。
不建议用这种方式合并外部字典,这使得外部资源文件跟硬编码偶合.
5. 合并资源字典 URI
可通过多种方法来包括合并资源字典,这些方法由将要使用的统一资源标识符 (URI) 格式来指示。概括地说,这些方法可以分为两类:作为项目一部分来编译的资源;不作为项目一部分来编译的资源。
对于作为项目一部分来编译的资源,可以使用引用资源位置的相对路径。相对路径是在编译过程中计算的。您的资源必须以“资源”生成操作形式定义为项目的一部分。如果您将资源的 .xaml 文件以“资源”形式包括在项目中,则不必将资源文件复制到输出目录,因为资源已经包括在所编译的应用程序中。您还可以使用“内容”生成操作,但是您必须将文件复制到输出目录,而且还必须将同一路径关系中的资源文件部署到可执行文件中。
|
注意: |
|
不要使用“嵌入的资源”生成操作。该生成操作本身受 WPF 应用程序的支持,但是在解析 Source 时不会合并 ResourceManager,因此无法将单独的资源从流中分离出来。只要您在访问资源时使用的还是 ResourceManager,您仍可以使用“嵌入的资源”来实现其他目的。 |
一个相关方法是使用 XAML 文件的 Pack URI 并称之为“源”。Pack URI 允许引用所引用程序集和其他方法的组件。有关 Pack URI 的更多信息,请参见 Windows Presentation Foundation 应用程序资源、内容和数据文件。
对于不是作为项目一部分来编译的资源,URI 是在运行时计算的。可以使用常见的 URI 传输机制(如 file: 或 http:)来引用资源文件。使用非编译资源方法的缺点在于,file: 访问机制需要额外的部署步骤,而 http: 访问机制则直接使用 Internet 安全区域。
6.重用合并字典
可以在应用程序之间重用或共享合并资源字典,因为要合并的资源字典可以通过任何有效的统一资源标识符 (URI) 来引用。您需要执行的确切操作将取决于应用程序的部署策略以及所遵循的应用程序模型。使用前面提到的 Pack URI 策略,在开发中可以通过共享程序集引用来将合并资源在多个项目之间共用。在该方案中,资源仍由客户端分发,而且至少有一个应用程序必须部署所引用的程序集。还可以通过一个使用 http 协议的分布式 URI 来引用合并资源。
将合并字典编写为本地应用程序文件或本地共享存储是另一种可能的合并字典/应用程序部署方案。
WPF-- 合并资源字典的更多相关文章
- WPF合并资源字典
1.合并多个外部资源字典成为本地字典 示例代码 <Page.Resources> <ResourceDictionary> <ResourceDictionary.Mer ...
- WPF之资源字典zz
最近在看wpf相关东西,虽然有过两年的wpf方面的开发经验,但是当时开发的时候,许多东西一知半解,至今都是模模糊糊,框架基本是别人搭建,自己也就照着模板写写,现在许多东西慢慢的理解了,回顾以前的若干记 ...
- WPF 为资源字典 添加事件响应的后台类
原文:WPF 为资源字典 添加事件响应的后台类 前言,有许多同学在写WPF程序时在资源字典里加入了其它控件,但又想写事件来控制这个控件,但是资源字典没有CS文件,不像窗体XAML还有一个后台的CS文件 ...
- WPF中关于合并资源字典
一.本项目中 <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!--<ResourceD ...
- WPF使用资源字典组织资源
转载:http://blog.163.com/wangzhenguo2005@126/blog/static/371405262010111413321728/ 首先在解决方案资源管理器中添加 ...
- wpf 切换资源字典的2中方式
var _1200RDUri = new Uri(String.Format(@"/aa;Component/Themes/1200Theme.xaml"), UriKind.Re ...
- WPF 遍历资源字典中的控件
object obItem=this.FindResource("canvasdt"); if (obItem is System.Windows.DataTemplate) { ...
- (转载)资源字典(Pro WPF 学习)
原地址:http://www.cnblogs.com/yxhq/archive/2012/07/09/2582508.html 1.创建资源字典 下面是一个资源字典(AppBrushes.xaml), ...
- 避免让WPF资源字典变得杂乱臃肿
原文:避免让WPF资源字典变得杂乱臃肿 避免让WPF资源字典变得杂乱臃肿 周银辉 今天看到项目种的一个XXXResource.xaml文件代码 ...
随机推荐
- Ansible 部署
环境: vim /etc/hosts 192.168.199.61 Ansible 192.168.199.60 Nginx1192.168.199.62 Nginx2192.168.199.63 H ...
- DC综合:划分与编码风格
划分与编码风格 合理的设计划分和好的HDL编码风格对成功的综合影响很大. 逻辑划分是成功综合(和布局布线,如果布图是层次化的)的关键. 综合划分 "分而治之" 把复杂的设计化简为更 ...
- [Now] Update an application hosted with Zeit’s Now
Because now deploys are immutable, you can’t push changes to a running instance - you just push a ne ...
- Linux环境下Apache ActiveMQ 基本安装
原文链接:https://www.jianshu.com/p/1c017088aa95 在linux上安装mq,并映射到外网.1.Apache ActiveMQ安装基本条件请参考链接:2.下载Apac ...
- [React Unit Testing] React unit testing demo
import React from 'react' const Release = React.createClass({ render() { const { title, artist, outO ...
- php实现 密码验证合格程序(复杂问题分类,超简单的)(分类+规范编码)
php实现 密码验证合格程序(复杂问题分类,超简单的)(分类+规范编码) 一.总结 一句话总结:复杂问题分类,超简单的.分类+规范编码. 1.写的时候判断 不能有相同长度超2的子串重复 的时候,子 ...
- 蓝牙简单配对(Simple Pairing)协议及代码流程简述
kangear注: 文章转自:http://blog.csdn.net/myxmu/article/details/12217135 原文把图给搞丢了.可是文章太好了,这个时候我就发挥多年的Googl ...
- Surf算法特征点检测与匹配
Speeded Up Robust Features(SURF,加速稳健特征),是一种稳健的局部特征点检测和描述算法.最初由Herbert Bay发表在2006年的欧洲计算机视觉国际会议(Europe ...
- 【codeforces 760A】Petr and a calendar
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- oracle 内存结构具体解释
Oracle 内存结构 与 Oracle 实例关联的基本内存结构包含: 系统全局区 (SGA):由全部server和后台进程共享.SGA 中存储的数据演示样例包含快速缓存的数据块和共享 SQL 区域. ...