资源集合

每个元素都有Resources属性,该属性存储了一个资源字典集合(它是ResourceDictionary类的实例)。资源集合可以包含任意类型的对象,并根据字符串编写索引。

每个元素既可以访问自己的资源集合中的资源,也可以访问所有父元素 的资源集合中的资源,所以一般将资源集合放在窗口级别或者应用程序级别。

资源的引用分为动态、静态。静态资源在首次创建窗口时一次性地设置完毕。动态资源,如果发生了改变,就会重新应用资源。一般在下列情况下才需要使用动态资源属性:

  • 资源具有依赖系统设置的属性(如当前Windows系统的颜色或者字体)
  • 准备通过编程方式替换资源对象(实现几类动态皮肤)

非共享资源

通常,在多个地方使用资源时,使用的是同一个对象实例。这种行为称为:共享。也可以在每次使用时创建单独的对象实例,对资源设置属性:

x:Shared=“False”

一般情况下,很少使用非共享资源,而是使用多个资源切换的形式来展示不同的资源

资源字典

如果希望在多个项目之间共享资源,可以使用资源字典。资源字典只包含XAML文档,除了希望存储的资源外,不做任何事情。

资源字典的XAML文件,务必将生成操作设置为Page(页),这样才能保证获得最佳性能将资源字典编译为BAML。

为了使用资源字典,需要将其合并到应用程序某些位置的资源集合中,可以在特定的窗口中执行,也可以合并到应用程序的资源集合中。

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <ResourceDictionary.MergedDictionaries>
                        <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
                        <ResourceDictionary Source="Resources/Themes/SkinDefault.xaml" />
                    </ResourceDictionary.MergedDictionaries>
                </ResourceDictionary>
                <ResourceDictionary>
                    <ResourceDictionary.MergedDictionaries>
                        <ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />
                        <ResourceDictionary Source="Resources/Themes/Theme.xaml" />
                    </ResourceDictionary.MergedDictionaries>
                </ResourceDictionary>                 <ResourceDictionary>
                    <ResourceDictionary.MergedDictionaries>
                        <ResourceDictionary Source="pack://application:,,,/LpbPrj.Client.UI;component/Resources/Themes/MyStyles.xaml" />
                    </ResourceDictionary.MergedDictionaries>
                </ResourceDictionary>
                <!--<ResourceDictionary Source="pack://application:,,,/LpbPrj.Client.UI;component/Resources/Themes/MyStyles.xaml" />-->
            </ResourceDictionary.MergedDictionaries>
            <!--<ObjectDataProvider
                x:Key="ExamTypes"
                MethodName="GetValues"
                ObjectType="sys:Enum">
                <ObjectDataProvider.MethodParameters>
                    <x:Type Type="data:ExamType" />
                </ObjectDataProvider.MethodParameters>
            </ObjectDataProvider>
            <ObjectDataProvider
                x:Key="ShowAnimations"
                MethodName="GetValues"
                ObjectType="sys:Enum">
                <ObjectDataProvider.MethodParameters>
                    <x:Type TypeName="hc:ShowAnimation" />
                </ObjectDataProvider.MethodParameters>
            </ObjectDataProvider>-->
            <!--<ObjectDataProvider
                x:Key="HatchStyles"
                MethodName="GetValues"
                ObjectType="sys:Enum">
                <ObjectDataProvider.MethodParameters>
                    <x:Type Type="hc:HatchStyle" />
                </ObjectDataProvider.MethodParameters>
            </ObjectDataProvider>-->
            <!--<data:EnumDataProvider x:Key="ExamTypes" Type="dataCore:ExamType" />
            <data:EnumDataProvider x:Key="DeviceTypes" Type="dataCore:DeviceType" />
            <data:EnumDataProvider x:Key="ShowAnimations" Type="hc:ShowAnimation" />
            <data:EnumDataProvider x:Key="HatchStyles" Type="hc:HatchStyle" />-->
            <!--<data:EnumDataProvider x:Key="SW6000InkCanvas" Type="dataCore:SW6000EditMode" />-->
        </ResourceDictionary>
    </Application.Resources>

程序集资源共享,可以使用pack URI语法:

<ResourceDictionary Source="pack://application:,,,/LpbPrj.Client.UI;component/Resources/Themes/MyStyles.xaml" />

注意:

对与音视频文件,一般不会打包到应用程序内部,会采用输出到程序执行目录的形式进行加载。会将音视频资源的属性进行设置:

  • 生成操作:内容
  • 复制到输出目录:始终复制 或者 如有较新则复制

WPF进阶技巧和实战04-资源的更多相关文章

  1. WPF进阶技巧和实战03-控件(3-文本控件及列表控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  2. WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  3. WPF进阶技巧和实战03-控件(5-列表、树、网格04)

    ListView控件 ListView继承自简单的没有特色的ListBox,增加了对基于列显示的支持,并增加了快速切换视图或显示模式的能力,而不需要重新绑定数据以重新构建列表. ListView类继承 ...

  4. WPF进阶技巧和实战08-依赖属性与绑定01

    依赖项属性 定义依赖项属性 注意:只能为依赖对象(继承自DependencyObject的类)添加依赖项属性.WPF中的元素基本上都继承自DependencyObject类. 静态字段 名称约定(属性 ...

  5. WPF进阶技巧和实战06-控件模板

    逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelp ...

  6. WPF进阶技巧和实战03-控件(5-列表、树、网格02)

    数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPa ...

  7. WPF进阶技巧和实战01-小技巧

    Svg在WPF中的使用 方法1:拷贝svg中的部分代码转换成Geometry(作为Path的Data使用) 在vs或者直接打开svg,看到如下代码: <?xml version="1. ...

  8. WPF进阶技巧和实战08-依赖属性与绑定02

    将元素绑定在一起 数据绑定最简单的形式是:源对象是WPF元素而且源属性是依赖项属性.依赖项属性内置了更改通知支持,当源对象中改变依赖项属性时,会立即更新目标对象的绑定属性. 元素绑定到元素也是经常使用 ...

  9. WPF进阶技巧和实战08-依赖属性与绑定03

    数据提供者 在大多数的代码中,都是通过设置元素的DataContext属性或者列表控件的ItemsSource属性,从而提供顶级的数据源.当数据对象是通过另一个类构造时,可以有其他选择. 一种是作为窗 ...

  10. WPF进阶技巧和实战09-事件(2-多点触控)

    多点触控输入 多点触控输入和传统的基于比的输入的区别是多点触控识别手势,用户可以移动多根手指以执行常见的操作,放大,旋转,拖动等. 多点触控的输入层次 WPF允许使用键盘和鼠标的高层次输入(例如单击和 ...

随机推荐

  1. c++本地动态连接库代码

    c++本地动态连接库代码 1 #pragma once 2 #include "stdafx.h" 3 4 #ifdef PERSON_EXPORTS 5 #define PERS ...

  2. DataTemplateSelector介绍

    DataTemplateSelector可以帮助我们实现动态选择数据绑定的模版,如通过ListView+DataTemplateSelector实现微信朋友圈或聊天列表效果. Github已有聊天效果 ...

  3. SpringBoot中自定义错误页面

    错误页面定制(在有模板引擎的情况下): 有模板的支持下: 在templates文件夹下 建立 error文件夹 在error文件夹下 404.html 500.html 4xx.html (名字就叫4 ...

  4. JDBC基础篇(MYSQL)——使用CallabeStatement调用存储过程

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day04_callable; import java.sql.CallableStatement; import ...

  5. 浅谈Java和Go的程序退出

    前言 今天在开发中对Java程序的退出产生了困惑,因为题主之前写过一段时间Go,这两者的程序退出逻辑是不同的,下面首先给出结论,再通过简单的例子来介绍. 对于Java程序,Main线程退出,如果当前存 ...

  6. k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2

    三.ETCD集群部署 类似于走zookeeper集群分布式协调服务,可做以key v形式存储在ETCD中. 官方链接:https://github.com/coreos/etcd 分布式kv存储,为分 ...

  7. 后端拜拜,用不到你了,前端开发数据模拟神器nodejs

    后端拜拜,用不到你了,前端开发数据模拟神器nodejs 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请 ...

  8. vue 引用 tcplayer 做直播( 俩个例子,都可以用。替换直播地址即可,后端推流,前端观看。 )

    例子一比例子二更加容易被理解.另外 m3u8 也支持 webrtc 开头的直播地址. 补充JS 得下载到本地,自行引入: https://imgcache.qq.com/open/qcloud/liv ...

  9. Jenkins(4)- 在centos7.x下完全卸载Jenkins

    如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html 先关闭tomcat ./shutd ...

  10. IKE~多预共享密钥问题~解决方案

    原文链接:Configuring more than one Main-Mode Pre-Shared Key (PSK) *dialup* IPSec phase1 可能需要梯子来翻过高墙.文章内容 ...