WFP资源
资源基础
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>
若是应用程序资源仍然不是查找资源的最后一站,元素还会查找系统资源。
系统资源
SystemColors、SystemFonts、SystemParameters 位于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资源的更多相关文章
- Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)
catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...
- 一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)
一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp) 程序员的生活要一切自动化,更要幸福^_^. 转载请注明出处http: ...
- spring mvc官网下最新jar搭建框架-静态资源访问处理-注解-自动扫描
1.从官网下载spring相关jar http://spring.io/projects 点击SPRING FRAMEWORK
- Fis3的前端工程化之路[三大特性篇之资源定位]
Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- ABP文档 - 嵌入的资源文件
文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...
- 【资源】.Net 入门@提高 - 逆天的高薪之路!
入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~ 官方学习计划 http://www.cnblogs.com/dunitian/p/5667901.html ----- ...
- 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?
0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...
- Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容
我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...
随机推荐
- 如何使用双重检查锁定在 Java 中创建线程安全的单例?
这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它.好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个线程试图同时创建 Singleton 实 ...
- 什么是 Swagger?你用 Spring Boot 实现了它吗?
Swagger 广泛用于可视化 API,使用 Swagger UI 为前端开发人员提供在线沙箱.Swagger 是用于生成 RESTful Web 服务的可视化表示的工具,规范和完整框架实现.它使文档 ...
- 给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
对于N阶幻方,从1开始把数字从小到大按以下规则依次写入: 一.在第一行中间一列写入1 二.依次向右上方写入2.3.4...... 三.如果某数字写在了表格的某个方向外面,那就把这个数字向相反方向移动N ...
- rbac-基于角色的权限控制系统(8种常用场景再现)
首先要抛出的问题是在代码世界里什么是权限? url就代表权限 如何实现权限控制? 下面详细介绍控制流程 1.1简单权限控制--表结构 简单权限控制,三个model,五张表 权限表permission ...
- 学习ELK日志平台(二)
一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索 ...
- 3.Spark设计与运行原理,基本操作
1.Spark已打造出结构一体化.功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能. Spark生态系统主要包含Spark Core.Spark SQL.Spark St ...
- ubuntu sublime text3 python 配置 sublime text3 python 配置
ubuntu sublime text3 python 配置 1.安装sublime text 3 安装过程非常简单,在terminal中输入: sudo add-apt-repository ...
- canvas绘图API详解
canvas绘图API详解 1.context的状态 矩阵变换属性 当前剪辑区域 context的其他状态属性: strokeStyle, fillStyle, globalAlpha, lineWi ...
- 在TypeScript项目中进行BDD测试
在TypeScript项目中进行BDD测试 什么是BDD? BDD(Behavior-Driven Design)是软件团队的一种工作方式,通过以下方式缩小业务人员和技术人员之间的差距: 鼓励跨角色协 ...
- msmpeng.exe阻止移动硬盘弹出
MsMpEng.exe 占用 该进程是微软反恶意软件服务的一个可执行文件,用户无法手动停止该进程. 首先运行 eventvwr.msc打开事件查看器,找到警告信息,查看是什么进程在阻止硬盘弹出. ...