WPF资源
在WPF中。有着两种资源,
一种是组件资源:又被称为程序集资源,以二进制存在编译后的程序集中,通常用于存放图片或其他音频文件.
第二种是对象资源:通常放于xaml中。比如WPF的样式和数据绑定特性.
demo地址 http://download.csdn.net/source/3449754
组件资源:和以前的WINFORM 和WEB中的图片资源一样
获取方式:例如在程序中添加了一个图片。可以直接通过下面
在XAML中添加:<Image x:Name="image1" Source="image/Desert.jpg"></Image>
在代码中可以通过以下方式引用资源
image1.Source = new BitmapImage(new Uri("image/Desert.jpg",UriKind.Relative));
image1.Stretch = Stretch.Fill;
对象资源:
对象资源是WPF新提供的资源类型类型,允许开发人员在任意位置定义资源。
如特定的控件,窗口或者程序级别的定义资源。
对象资源之资源集合
资源被存储在RESOUCE熟悉中。这是一个键值对的集合类型,一般使用字符串为键,值可以是任何类型。
为了定义资源。必须使用X:KEY属性来为资源分配一个键,在同一资源集合中,键必须唯一。
资源可以嵌套。考虑一个DOME
在一个GRID中嵌套其他2个grid控件。每个控件有自己的资源。如下代码:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="嵌套资源" Height="300" Width="300">
<!--窗口级别的资源-->
<Window.Resources>
<SolidColorBrush x:Key="BackGroudColor" Color="Yellow"></SolidColorBrush>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<!--使用窗口级别资源-->
<Grid Background="{StaticResource BackGroudColor}" Grid.Row="0" Grid.Column="0">
</Grid>
<!--使用GRID级别资源-->
<Grid Grid.Column="1" >
<Grid.Resources>
<SolidColorBrush x:Key="BackGroudColor" Color="Blue"></SolidColorBrush>
</Grid.Resources>
<Grid.Background>
<StaticResource ResourceKey="BackGroudColor"></StaticResource>
</Grid.Background>
</Grid>
</Grid>
</Window>
首先在定义一个窗口资源,然后再GRID下单一个子GRID中在定义一个同名的GRID级别资源。
然后对嵌套的2个GRID都使用同一名的资源,可以看出差异
如图:“
在第一个嵌套GRID中是窗口级别的资源。
在第二个嵌套的GRID中是GRID自身的资源。
通过这个DEMO可以明白:wpf查找自身资源的顺序是元素---窗口--应用程序级--系统级别;
其次调用对象资源的两种方式:
第一种:
第二种:
<StaticResource ResourceKey="BackGroudColor"></StaticResource>
</Grid.Background>
对象资源之静态和动态资源
静态资源和动态资源的主要区别在于静态资源只从资源集合中一次获取资源。而使用动态资源,当资源变化时,可以把资源变化应用到元素或者窗体上。
下面看一个DEMO
在一个窗体中定义2个GRID。使用同一个窗口级别资源。其中一个使用静态资源,另外一个使用动态资源,单机变化资源按钮。使资源颜色发生变化。
此时使用动态资源的GRID颜色变化。而使用静态资源的GRID没有变化。
如图:
点击变化:
具体代码:
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="静态资源和动态资源" Height="300" Width="300">
<!--窗口级别的资源-->
<Window.Resources>
<SolidColorBrush x:Key="BackGroudColor" Color="Yellow"></SolidColorBrush>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid Background="{StaticResource BackGroudColor}" Grid.Row="0" Grid.Column="0">
</Grid>
<Grid Grid.Column="1" Background="{DynamicResource BackGroudColor}" >
</Grid>
<Button Grid.Column="2" Width="100" Margin="0,80,-7,149" Click="Button_Click" Content="变化资源">
</Button>
</Grid>
</Window>
通过以上XAML。可以知道:
button单击事件:
this.Resources["BackGroudColor"] = new SolidColorBrush(Colors.Blue);
静态资源访问方法:{StaticResource BackGroudColor}
动态资源访问方法:{DynamicResource BackGroudColor}
对象资源之编程访问资源
通过编程访问资源一共有三种方法。
方法一:使用this.resource["资源名"];
方法二:this.findresource("资源名");
方法三:this.tryfindresource("资源名");
方法一和其他方法区别:resource仅元素本身的资源,其他的可以通过向上遍历访问资源。
方法二和方法三区别:方法二找不到资源会报异常。方法三找不到资源放回空值。
使用代码:
{
Button b = sender as Button;
b.Background = this.TryFindResource("BackGroudColor") as SolidColorBrush;
}
对象资源之应用程序资源
应用程序资源和元素资源和窗体资源比起来更广。他覆盖了WPF的整个应用程序
使用方法:
在APP.XAML中使用添加<application.resouces>标签下面添加自己的资源。
如:
<Application.Resources>
<ResourceDictionary>
<SolidColorBrush x:Key="BackGroudColor" Color="Yellow"></SolidColorBrush>
</ResourceDictionary>
</Application.Resources>
访问方式和之前一样。不过wpf查找自身资源的顺序是元素---窗口--应用程序级--系统级别;
对象资源之系统资源:
系统资源是系统自带的资源如SYSTEMCLORS,SYSTEMFONTS等资源,访问时和平常访问资源不一样,
需要这种形式 FontSize="{ {x:Static SystemFonts.IconFontSizeKey}}
加上X:STATIC标记。
也可以使用
FontSize="{DynamicResource {x:Static SystemFonts.IconFontSizeKey}}
这样的话当系统资源变更时候。会自动应用到元素。
对象资源之资源字典
开发人员也可以使用一个独立的XMAL文件来定义资源。
使用方式:点击项目右键--------添加-----------ResourceDictionary
资源字典是使用ResourceDictionary为跟标记
生成方式选用PAGE。这样能够获得好的性能。
也可以使用生成方式Resource 。这样的话只有程序运行的时候才编译。会有性能开支。
使用方法:
添加资源字典后:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush x:Key="BackGroudColor1" Color="Yellow"></SolidColorBrush>
</ResourceDictionary>
在APP.XAML中使用 <ResourceDictionary.MergedDictionaries>这个标记。合并资源字典。
如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="资源字典.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<SolidColorBrush x:Key="BackGroudColor" Color="Yellow"></SolidColorBrush>
</ResourceDictionary>
</Application.Resources>
在窗体中直接 通过KEY值调用资源。
WPF资源的更多相关文章
- [原创]WPF资源Binding自定义集合类。
简单介绍一下Wpf资源字典: 每个WPF界面元素都有一个名为Resource的属性,这个属性继承至FrameworkElement类,其类型为ResourceDictionary.ResourceDi ...
- WPF快速入门系列(6)——WPF资源和样式
一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果 ...
- 九,WPF资源
WPF资源的优点 WPF资源系统是一种保管一系列有用对象的简单方法,从而可以更容易地重用这些对象,它主要有以下优点: 高效,通过资源可以定义一个对象,并在标记中的多个地方重用,这会使代码变的更加精简, ...
- WPF 10天修炼 第七天- WPF资源、样式、控件模板
WPF资源 对象资源 WPF允许在XAML标记的任意位置定义资源.比如在特定的控件.窗口或应用程序级别定义资源,WPF资源系统提供的对象资源有如下好处: 1. 高效:使用对象资源可以在一个地方定义而 ...
- 在独立的文件里定义WPF资源
一.文章概述 本演示介绍怎样在单独的文件里定义WPF资源.并在须要的地方调用相关资源文件. 相关下载(代码.屏幕录像):http://pan.baidu.com/s/1sjO7StB 在线播放:htt ...
- 避免让WPF资源字典变得杂乱臃肿
原文:避免让WPF资源字典变得杂乱臃肿 避免让WPF资源字典变得杂乱臃肿 周银辉 今天看到项目种的一个XXXResource.xaml文件代码 ...
- WPF 资源(StaticResource 静态资源、DynamicResource 动态资源、添加二进制资源、绑定资源树)
原文:WPF 资源(StaticResource 静态资源.DynamicResource 动态资源.添加二进制资源.绑定资源树) 一.WPF对象级(Window对象)资源的定义与查找 实例一: St ...
- WPF快速入门系列(6)—— WPF资源和样式
一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果 ...
- [WPF]资源字典——程序集之间的资源共享 简单换皮肤
直接上代码,已便已后自己查况阅,新手也可以看! 1.新建一个资料类和一个WPF工程 2.APP.XAML应该资源字典,注意应Source格式,前面一定要有“/” <ResourceDiction ...
随机推荐
- Lucene.net的简单使用
一.Lucene.net的简单介绍 1.为什么要使用Lucene.net 使用like的模糊查询,模糊度太低,中间添加几个字就无法查找.同时会造成数据库的全文检索,效率低下,数据库服务器造 ...
- oracle基础开发工具及常用命令
oracle自带用户的讲解 1,oracle安装完毕创建数据库实例的时候会自动生成sys,system,scott 2,sys用户超级管理员,具有oracle的最高权限,具有sysdba角色,具有cr ...
- Redis讲解
buffer 缓冲 用于写 cache 缓存 用于读 redis 支持持久化 安装redis yum -y install redis 配置文件/etc/redis.conf 是否在后台运行 ...
- docker 2375 vulnerability and self-signatuer certifications
Docker暴露2375端口,引起安全漏洞 今天有小伙伴发现Docker暴露出2375端口,引起了安全漏洞.我现在给大家介绍整个事情的来龙去脉,并告诉小伙伴们,怎么修复这个漏洞. 为了实现集群管理,D ...
- Mongo副本集的配置以及php node.js连接使用副本集
最近弄了下mongodb的副本集, 首先说下没有认证情况的副本集,相对比较简单,因为环境有限,我在同一台服务器上做了模拟. --rest参数是打开web监控页面,比如我们这里监听37017端口,则打开 ...
- xutil3 post 和 get请求
https://i.cnblogs.com/EditPosts.aspx?postid=7001253 compile 'org.xutils:xutils:3.3.36' 注册xutil3 < ...
- Python---1. 基础数据类型
转载: Py西游攻关之基础数据类型
- RabittMQ实践(一): RabbitMQ的安装、启动
安装: 启动监控管理器:rabbitmq-plugins enable rabbitmq_management 关闭监控管理器:rabbitmq-plugins disable rabbitmq_ ...
- 20145105 《Java程序设计》实验一总结
实验一 Java开发环境的熟悉 一. 实验内容: (一)使用JDK编译.运行简单的程序 (二)使用idea编辑.编译.运行.调试Java程序. 二. 实验步骤: (一) 命令行下J ...
- 2018-2019-1 20189215 《Linux内核原理与分析》第四周作业
<庖丁解牛>第三章书本知识总结 计算机的三大法宝 存储程序计算机 函数调用堆栈 中断 操作系统的两把宝剑 中断上下文的切换--保存现场和恢复现场 进程上下文的切换 Linux内核源码的目录 ...