WPF合并资源字典
1.合并多个外部资源字典成为本地字典
示例代码
<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.合并多个外部资源字典到本地字典
示例代码
<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.合并外部字典同时对外部字典进行扩充或替代
示例代码
<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 来引用合并资源。
将合并字典编写为本地应用程序文件或本地共享存储是另一种可能的合并字典/应用程序部署方案。
文章出处:http://www.diybl.com/course/4_webprogram/asp.net/netjs/200847/108726.html
WPF合并资源字典的更多相关文章
- 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) { ...
- WPF-- 合并资源字典
原文:WPF-- 合并资源字典 1. 合并多个外部资源字典成为本地字典 语言 XAML 示例代码 <Page.Resources> <ResourceDicti ...
- (转载)资源字典(Pro WPF 学习)
原地址:http://www.cnblogs.com/yxhq/archive/2012/07/09/2582508.html 1.创建资源字典 下面是一个资源字典(AppBrushes.xaml), ...
- 避免让WPF资源字典变得杂乱臃肿
原文:避免让WPF资源字典变得杂乱臃肿 避免让WPF资源字典变得杂乱臃肿 周银辉 今天看到项目种的一个XXXResource.xaml文件代码 ...
随机推荐
- 使用shiro安全框架上传文件时用HttpSession获取ServletContext为null问题解决方法。
<!--在shiroFilter 中加入一下配置--> <init-param> <param-name>targetFilterLifecycle</par ...
- 分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
BOOL型变量:if(!var) int型变量: if(var==0) float型变量: const float EPSINON = 0.00001; if ((x > ...
- phpcms v9联动菜单的调用方法_详解get_linkage函数
phpcms v9联动菜单调用方法[此为内容页调用方法]: {get_linkage($areaid,1,' >> ',1)} 显示效果: phpcms吧 >> 模板下载 &g ...
- C++是怎么实现多态性的
C++是怎么实现多态性的,C++中多态实现的原理, 当一个类中有虚函数时,系统会为该类构造一个虚函数表vtable,他是一个指针数组,存放每个虚函数的入口地址,编译器还会在此类中隐含插入一个指针vpt ...
- 无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。
在一个项目中使用LINQ和EF时出现了题目所示的异常,搜索了很多资料都找不到解决办法,主要是因为EF方面的知识欠缺. 先将情况记录如下,以供以后参考. 查询主要设计两张表,由外键关联: 在进行下面的查 ...
- common常用方法和部分算法
var commonindex = function() {}; commonindex.prototype = { ajaxRequest: function(request) { $.ajax({ ...
- 递归目录的shell脚本
#! /bin/sh # 在其他目录运行时一定要加上这样的语句 # 尤其是配置在crontab里自动运行 cd `` #定义数据别名 alias statdb="/usr/local/mys ...
- SQL basic
Function 从例子学习 drop function dbo.getWorkingDateCount; --getWorkingDateCount = functionName CREATE FU ...
- RUBY的类封装,继承,多态简单演示
class Person def initialize(name,age=18) @name=name @age=age @motherland="China" end def t ...
- C51系列RAM寄存器表
特殊功能寄存器地址表 SFR 符号 字节 地址 位地址和位名称 D7 D6 D5 D4 D3 D2 D1 D0 P0口 P0 80H P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0. ...