资源基础

WPF程序在代码中以及在标记中的各个位置定义资源,具有高效性、可维护性、适应性的优点。

资源的层次

<Windows.Resource>
<ImageBrush x:key="backgroudBrush" ImageSource="happy.jpg"/>
</Windows.Resource>
<StackPanel>
<Button Background="{StaticResource backgroudBrush}"/>
<Button Background="{DynamicResource backgroudBrush}">
<Button.Resources>
<ImageBrush Key="backgroudBrush" ImageSource="Sad.jpg"/>
</Button.Resources>
</Button>
</StackPanel>

元素查找资源是从自己的资源集合中开始查找的,所以以上代码第一个按钮应用是happy的背景图,第二个按钮是Sad的背景图。

静态资源和动态资源

静态资源和动态资源是资源的加载方式,资源是可以修改的。

ImageBrush brush=(ImageBrush)this.Resources["backgroudBrush"];
brush.Viewport=new Rect(0,5,5,5);

以上代码改变画刷平铺图像的尺寸,不管是静态还是动态资源使用都会更新界面。这是应为Brush类继承自Freezable类,Freezbale类具有变化跟踪特效,无论何时在WPF中改变画刷,所用使用该画刷的控件都会自动更新。

静态资源与动态资源之间的区别:

静态资源只从资源集合中获取对象一次,根据对象的类型(以及对象的使用方式),对象的任何变化都可能被立即注意到。

动态资源在每次需要资源时都会去资源集合中查找对象,这意味着在同一键放置一个全新的对象,动态资源会引用改变化。

this.Resources["backgroudBrush"] = new SolidColorBrush(Colors.Blue);

动态资源应用新的变化,而静态资源不知道该资源已经被替换,它仍然使用原来的资源。

不应过度使用动态资源,极少数情况下动态资源用于提高第一次窗口加载是的性能,这是因为静态资源总是在创建窗口时加载,而动态资源是在第一次使用它们时加载。除非资源非常大且复杂,否则这样做没有任何益处。

非共享资源

关闭共享行为使用Shared特性

   <ImageBrush x:Key="backgroundBrush" x:Shared="False" />

通过代码访问资源

使用FrameworkElement.FindResource()FrameworkElement.TryFindResource()方法。建议使用TryFindResource(),差不到资源时返回null而不会抛出异常。

  Button btn = sender as Button;
ImageBrush brush = (ImageBrush)btn.TryFindResource("backgroundBrush");

应用程序资源

窗口不是查找资源的最后一站,WPF会继续检查应用程序定义的资源集合,这些资源是再App.xaml文件标记中定义的资源。

<Application
...>
<Application.Resources>
<ImageBrush x:Key="BackgroundBrush" />
</Application.Resources>
</Application>

若是应用程序资源仍然不是查找资源的最后一站,元素还会查找系统资源。

系统资源

SystemColorsSystemFontsSystemParameters 位于System.Windows,此命名空间中的版本是WPF的一部分,它们使用正确的数据类型并且支持资源系统。System.Drawing命名空间下也有SystemColors、SystemFonts两个类,他们是Windows窗体的一部分。

<label Foreground="{x:static SystemColors.WindowTextBrush}"/>

此方式引用改变Windows颜色,不会更新Label的颜色。

<label Foreground="{DynamicResource
{x:static SystemColors.WindowTextBrushKey}}"/>

定义动态资源,从资源集合中查找, 此方式改变系统颜色,Label会更新颜色。

资源字典

用于储存项目之间可共享资源,XAML文档。使用资源字典方式如下,Window中使用相同。

<Application ...>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/asd;component/Dictionary1.xaml" />
<ResourceDictionary Source="pack://application:,,,/asd;component/Dictionary2.xaml" />
</ResourceDictionary.MergedDictionaries>
<ImageBrush x:Key="BackgroundBrush" Viewport="0,5,5,5" />
</ResourceDictionary>
</Application.Resources>
</Application>

若要附加新资源可在ResourceDictionary.MergedDictionaries之前或之后添加。

程序集之间共享资源

在代码中使用程序集资源

ResourceDictionary resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri("CustomControlLibrary;component/Dictionarys/Dictionary1.xaml",UriKind.Relative); Button btn= sender as Button;
btn.Background = (ImageBrush)resourceDictionary["backgroundBrush"];

还有以ComponentResourceKey实例作为键名 的资源引用。

WFP资源的更多相关文章

  1. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  2. 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)

    一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^. 转载请注明出处http: ...

  3. spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描

    1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK

  4. Fis3的前端工程化之路[三大特性篇之资源定位]

    Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  6. ABP文档 - 嵌入的资源文件

    文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...

  7. 【资源】.Net 入门@提高 - 逆天的高薪之路!

     入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~    官方学习计划 http://www.cnblogs.com/dunitian/p/5667901.html ----- ...

  8. 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?

    0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...

  9. Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

    我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...

随机推荐

  1. Collection框架中实现比较要实现什么接口?

    Java集合框架中需要比较大小的集合包括TreeMap.TreeSet,其中TreeMap会根据key-value对中key的大小进行排序,而TreeSet则会对集合元素进行排序. 因此TreeMap ...

  2. Mac安装swoole中遇到的问题

    转:https://blog.csdn.net/lishanleilixin/article/details/96137272 1:下载swoole源码,https://github.com/swoo ...

  3. 数组有没有 length()方法?String 有没有 length()方法?

    数组没有 length()方法,有 length 的属性. String 有 length()方法.JavaScript中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混 ...

  4. C++多态例子_虚函数

    #include<iostream> using namespace std; class parent { public: virtual void fun() { cout <& ...

  5. 什么是IOC?

    IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传 ...

  6. HMS Core定位服务在生活服务类App中可以自动填写收货地址啦

    在涉及团购.外卖.快递.家政.物流.搬家等生活服务类的App.小程序中,填写收货地址是用户高频使用的功能.这一功能通常采取让用户手动填写的解决方案,例如上下拉动选择浙江省-->杭州市--> ...

  7. 在网页中预览excel表格文件

    项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...

  8. 所有用CSS3写的3D特效,都离不开这些知识

    起因 昨晚在做慕课网的十天精通CSS3课程,其中的综合练习是要做一个3D导航翻转的效果.非常高大上. 以往这些效果我都很不屑,觉得网上一大堆这些特效的代码,复制粘贴就好了,够快.但是现实工作中,其实自 ...

  9. Hadoop伪分布式集群实现SSH免密登录

    在启动Hadoop时候报了这样一个错误: Starting namenodes on [hadoop] hadoop: (Permission denied (publickey,gssapi-key ...

  10. Input的校验表达式

    1.只是不能输入空格 <input type="text" onkeyup="this.value=this.value.replace(/^ +| +$/g,'' ...