避免让WPF资源字典变得杂乱臃肿
原文: 避免让WPF资源字典变得杂乱臃肿

  避免让WPF资源字典变得杂乱臃肿
                           周银辉

今天看到项目种的一个XXXResource.xaml文件代码有二千多行,这引发了我一些思考:如何组织我们的WPF资源。在WPF中可以有很多种组织资源的方式,下面分别介绍:

1,每个元素维持自己的资源。拥有Resources属性的对象有很多种类型,比如Application、Window、Page、Style、FrameworkTemplate、FrameworkElement、FrameworkContentElement等。在这种模式种每种元素维持自己所需要的资源,而不顾忌资源是否可以共享,比如两个Button:
        <Button x:Name="btn1"

Content="button 1"

Foreground="{DynamicResource redBrush}">

<Button.Resources>

<SolidColorBrush  x:Key="redBrush" Color="Red"/>

</Button.Resources>

</Button>

<Button x:Name="btn2"

Content="button 2"

Foreground="{DynamicResource redBrush}">

<Button.Resources>

<SolidColorBrush  x:Key="redBrush" Color="Red"/>

</Button.Resources>

</Button>

这造成的问题是,资源不能共享而重复创建一些相同的资源影响效率。

2,提高资源共享率。我们可以将共享的资源转移更高的层次中,以便底层次的元素可以直接引用这些资源,而不必各自重新创建,比如:

<StackPanel>

<StackPanel.Resources>

<SolidColorBrush  x:Key="redBrush" Color="Red"/>

</StackPanel.Resources>

<Button x:Name="btn1"

Content="button 1"

Foreground="{DynamicResource redBrush}">

</Button>

<Button x:Name="btn2"

Content="button 2"

Foreground="{DynamicResource redBrush}">

</Button>

</StackPanel>

我们将redBrush移动到了两个Button的公共父亲StackPanel中,这样他们就可以同时引用了。

但通常情况下,为了更大范围的共享,我们会将很多Resoureces移动到Window(或Page)甚至App范围内。

但随着资源的增多,如果我们将这些资源都塞进一个XAML文件中,那么我们的XAML文件将变得非常的臃肿(比如一不小心就几千行,其阅读性将变得很差,并且要想快速导航到欲查找的资源也不容易)。为此,我们得考虑如何重新组织我们的资源来解决这个问题。

一种可行的方式是将Resource按照类型来划分到不同的ResourceDictionary文件中,然后使用MergedDictionaries来合并各个资源字典。在进行分组之前所有的资源都在同一个资源字典中,如下图:

我们按照不同的类型分组后(Brushes,DataTemplates,Styles,Converters等等,每一种类型对应一个资源字典,这样资源字典就被拆分得比较小了),如下图:

然后在将这些字典合并成一个字典来使用:

<Application.Resources>

<ResourceDictionary>

<ResourceDictionary.MergedDictionaries>

<ResourceDictionary Source="Resources"Brushes.xaml"/>

<ResourceDictionary Source="Resources"Styles.xaml"/>

<ResourceDictionary Source="Resources"DataTemplates.xaml"/>

</ResourceDictionary.MergedDictionaries>

</ResourceDictionary>

</Application.Resources>

这样一个明显的好处是,让我们资源组织得更加的结构化,更好的查找和维护,更适合程序员的观点。但其明显的一个缺点是Blend的Resource目录面板对您多建立的资源的多级目录结构表现得不明显,不能展现目标的多层结构而展现成一个平面结构,导致你不在区分不同文件夹下的同名资源文件时又些不方便(但,你可以把鼠标移动到文件上,其Tooltip会显示各自的完整路径来区分),如下图:

posted on 2018-09-06 09:52 NET未来之路 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/9596556.html

避免让WPF资源字典变得杂乱臃肿相关推荐

  1. WPF 资源字典【转】

    使用好处:存储需要被本地话的内容(错误消息字符串等,实现软编码),减少重复的代码,重用样式,实现多个项目之间的共享资源; 修改一个地方所有引用的地方都会被修改,方便统一风格; 使用方法,归纳起来主要有 ...

  2. wpf 资源字典中定义FontFamily

    1.引入FontFamily所在程序集: xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/composite-font&quo ...

  3. wpf 关于程序集间使用资源字典共享资源

    最近学习一些了关于程序集之间共享资源的知识,在这里记录下来. (1)创建 首先是共享资源的创建,创建一个新的"wpf自定义控件"项目,然后随便添加一个图片作为示例资源. 文件结构如 ...

  4. 【WPF学习】第三十五章 资源字典

    如果希望在多个项目之间共享资源,可创建资源字典.资源字典只是XAML文档,除了存储希望使用的资源外,不做其他任何事情. 一.创建资源字典 下面是一个资源字典示例,它包含一个资源: <Resour ...

  5. WPF中利用DynamicResource动态资源和资源字典实现软件中英文切换

    在一个项目中,有时候会遇到不同国家或地区的软件用户,这样就需要对软件UI界面进行语言翻译,我们可以利用DynamicResource和资源字典来实现这一需求.我们可以将不同的语言字典封装到一个项目中, ...

  6. WPF资源的基本概念

    WPF资源系统是一种保管一系列对象(如常用的画刷.样式或模版)的简单办法,从而更容易地复用这些对象. WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件.窗口一起定义,或在整个应用程序中定 ...

  7. WPF快速入门系列(6)——WPF资源和样式

    WPF快速入门系列(6)--WPF资源和样式 一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一 ...

  8. 资源字典——程序集之间的资源共享

    最近在做一个WPF的应用,我想在WPF的应用中使用资源字典应该是很常见的事情,由于是初次设计这种程序,对WPF也不是很熟悉,不免会遇上一些问题,当然很多也是一些基础的低级的,比如本文将要介绍的&quo ...

  9. WPF 资源路径设置

    今天使用WPF开发 开发中自定义控件 使用了图片  当 图片的宿主不是Image 的时候路径就会有点不对 留下 笔记  自用 Xaml 代码 <Border x:Name="b_but ...

最新文章

  1. MySQL 笔记9 -- PyMySQL
  2. POJ 3126 Prime Path(BFS 数字处理)
  3. 90 % Java 程序员被误导的一个性能优化策略
  4. linux 安装python3.8的几种方法
  5. DNS A记录和CNAME记录
  6. php中configuration,php configuration
  7. 两种include方式及filter中的dispatcher解析
  8. ELK快速搭建一个集中化日志平台
  9. java读取文件 路径_Java中的获取文件的物理绝对路径,和读取文件
  10. 电大有计算机教程吗,电大教程 计算机概述.ppt
  11. webRTC初探:如何实现音视频的录制
  12. 【20220412】文献翻译4:交互中的手势和语言概述
  13. 电商创业的五大新模式
  14. PMP/CAPM/PgMP/ACP考试报名资格
  15. 基于知识图谱+机器学习,搭建风控模型的项目落地
  16. 什么叫单模光纤_单模光纤和多模光纤有什么区别
  17. 如何使用MySQL存储Emoji表情,UTF-8和UTF-8MB4字符编码有何区别?
  18. iOS 实现直接跳转打开定位
  19. office2019安装步骤
  20. ReactiveX -Rx

热门文章

  1. 微信小程序预览 word、excel、ppt、pdf 等文件
  2. http状态码有哪些?代表什么意思?(查询手册而已)
  3. c++植树问题解决代码
  4. 进入html+css世界的正确姿势
  5. 如何在新环境接手项目?(上)【洞见2】
  6. python if 函数怎么写
  7. Java 工厂设计模式
  8. 我用ubuntu——linux路上搞qq,及,其他
  9. R入门(一)----读取数据、查看数据
  10. 浏览器UA,浏览器标识检测