原文: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-- 合并资源字典的更多相关文章

  1. WPF合并资源字典

    1.合并多个外部资源字典成为本地字典 示例代码 <Page.Resources> <ResourceDictionary> <ResourceDictionary.Mer ...

  2. WPF之资源字典zz

    最近在看wpf相关东西,虽然有过两年的wpf方面的开发经验,但是当时开发的时候,许多东西一知半解,至今都是模模糊糊,框架基本是别人搭建,自己也就照着模板写写,现在许多东西慢慢的理解了,回顾以前的若干记 ...

  3. WPF 为资源字典 添加事件响应的后台类

    原文:WPF 为资源字典 添加事件响应的后台类 前言,有许多同学在写WPF程序时在资源字典里加入了其它控件,但又想写事件来控制这个控件,但是资源字典没有CS文件,不像窗体XAML还有一个后台的CS文件 ...

  4. WPF中关于合并资源字典

    一.本项目中 <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!--<ResourceD ...

  5. WPF使用资源字典组织资源

    转载:http://blog.163.com/wangzhenguo2005@126/blog/static/371405262010111413321728/     首先在解决方案资源管理器中添加 ...

  6. wpf 切换资源字典的2中方式

    var _1200RDUri = new Uri(String.Format(@"/aa;Component/Themes/1200Theme.xaml"), UriKind.Re ...

  7. WPF 遍历资源字典中的控件

    object obItem=this.FindResource("canvasdt"); if (obItem is System.Windows.DataTemplate) { ...

  8. (转载)资源字典(Pro WPF 学习)

    原地址:http://www.cnblogs.com/yxhq/archive/2012/07/09/2582508.html 1.创建资源字典 下面是一个资源字典(AppBrushes.xaml), ...

  9. 避免让WPF资源字典变得杂乱臃肿

    原文:避免让WPF资源字典变得杂乱臃肿   避免让WPF资源字典变得杂乱臃肿                            周银辉 今天看到项目种的一个XXXResource.xaml文件代码 ...

随机推荐

  1. 【例题5-4 UVA - 156】Ananagrams

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个字符串如果每个字符按照升序排一下.假设他们能够互相变化. 则肯定是一样的. 根据这个东西,用一个map来判重就好. [错的次数] ...

  2. Android系统开发(8)——linx进程基本概念

    一.proc文件系统 传统意义上的文件系统是用于块设备上信息的存储,/proc这个目录是一个虚拟文件系统,它放置的数据都是在内存当中,所以这个目录本身不占用任何硬盘空间.主要包含如下系统信息: 内存管 ...

  3. Fragment为载体可自己主动布局的CardView(GitHub上写开源项目初体验)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 前些天一直在看Android5.0 的Material Desgin,里面新增 ...

  4. 我的前端规范——CSS篇

    相关文章 简书原文:https://www.jianshu.com/p/e87bfd27ff59 我的前端规范——开篇:http://www.cnblogs.com/shcrk/p/9271561.h ...

  5. 【66.47%】【codeforces 556B】Case of Fake Numbers

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. mysqldump备份脚本

    #!/bin/bash # 10 23 * * * /bin/bash /data/script/backup_mysqldump.sh BDATE=`date +%Y%m%d%H%M%S`BPATH ...

  7. [TypeScript] Find the repeated item in an array using TypeScript

    Say you have an array that has at least one item repeated. How would you find the repeated item. Thi ...

  8. 博客搬家啦! -----> http://ronghaopger.github.io/

    新地方: http://ronghaopger.github.io/ 以后这里就不更新了,感谢博客园!

  9. 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源

    个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配 ...

  10. js如何实现动态点击改变单元格颜色?

    js如何实现动态点击改变单元格颜色? 一.总结 1.通过table的rows属性,遍历表格所有行,然后通过cells属性,遍历每一行中的单元格. 2.遍历的过程中,动态的为每一个单元格定义单击事件,改 ...