WPF-- 合并资源字典

简介: 原文:WPF-- 合并资源字典 1.        合并多个外部资源字典成为本地字典   语言 ...
原文: 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 来引用合并资源。

将合并字典编写为本地应用程序文件或本地共享存储是另一种可能的合并字典/应用程序部署方案。

 

 
目录
相关文章
|
4月前
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
4月前
|
开发者 C# 存储
WPF开发者必读:资源字典应用秘籍,轻松实现样式与模板共享,让你的WPF应用更上一层楼!
【8月更文挑战第31天】在WPF开发中,资源字典是一种强大的工具,用于共享样式、模板、图像等资源,提高了应用的可维护性和可扩展性。本文介绍了资源字典的基础知识、创建方法及最佳实践,并通过示例展示了如何在项目中有效利用资源字典,实现资源的重用和动态绑定。
97 0
|
4月前
|
C#
WPF 静态资源(StaticResource)和动态资源(DynamicResource)
WPF 静态资源(StaticResource)和动态资源(DynamicResource)
128 0
|
C# 数据格式 XML
WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树) 一、WPF对象级(Window对象)资源的定义与查找 实例一: StaticR...
8453 0
|
7月前
|
C#
浅谈WPF之样式与资源
WPF通过样式,不仅可以方便的设置控件元素的展示方式,给用户呈现多样化的体验,还简化配置,避免重复设置元素的属性,以达到节约成本,提高工作效率的目的,样式也是资源的一种表现形式。本文以一个简单的小例子,简述如何设置WPF的样式以及资源的应用,仅供学习分享使用,如有不足之处,还请指正。
127 0
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
C#
WPF资源字典怎么用
资源字典的使用方法
235 0
WPF资源字典怎么用
|
C#
WPF中的一个bug造成CPU资源拉满
WPF中的一个bug造成CPU资源拉满
208 0
|
C#
How do I duplicate a resource reference in code behind in WPF?如何在WPF后台代码中中复制引用的资源?
原文 https://stackoverflow.com/questions/28240528/how-do-i-duplicate-a-resource-reference-in-code-behind-in-wpf 如何在WPF后台代码中中复制引用的资源? In my application, I have a color resources.
835 0
|
C#
在WPF中合并两个ObservableCollection
原文:在WPF中合并两个ObservableCollection WPF中的ObservableCollection是一个非常常用的集合对象,我们可以通过将它绑定到ListBox之类的集合控件上时,当集合发生变更时,会同步更新到界面上。
1338 0