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 ...
随机推荐
- php 判断变量函数
1.isset功能:判断变量是否被初始化 判断变量是否被定义了 2.empty功能:检测变量是否为"空" 说明:任何一个未初始化的变量.值为 0 或 false 或 空字符串&qu ...
- Linux--vim编辑器和文件恢复
第五章 Vim编辑器和恢复ext4下误删除的文件-Xmanager工具 本节所讲内容: 5.1 vim的使用 5.2 实战:恢复ext4文件系统下误删除的文件 5.3 实战:使用xmanage ...
- MyBatis 的真正强大在于它的映射语句 如果有一个独立且完美的数据库映射模式,所有应用程序都可以使用它
mybatis – MyBatis 3 | Mapper XML 文件 http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html mybatis – My ...
- ES6基础教程(整理自阮一峰)
------------------------ECMAScript 6 简介------------------------ECMAScript 和 JavaScript 的关系是,前者是后者的规格 ...
- JS原生ajax
原文链接:http://caibaojian.com/ajax-jsonp.html 一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面: ajax的技术核心是 XMLHttpRe ...
- nginx简介和配置gd
转自:https://www.cnblogs.com/zhouxinfei/p/7862285.html nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也 ...
- [css]网站骨架布局作业
实现效果图: 代码实现 第一次写的时候不知道如何下手, 后来摸清规律了,由大到小. 由全局到局部 第一次还遇到区块命名问题, 和哪个该怎么划分问题 第一次还遇到由于划分不规整,所以有些代码没达到预期的 ...
- Zabbix设置自定义监控
[zabbix]自定义监控项key值 说明: zabbix自带的默认模版里包括了很多监控项,有时候为了满足业务需求,需要根据自己的监控项目自定义监控项,这里介绍一种自定义监控项的方式. 1,首先编 ...
- PAT 1031 Hello World for U[一般]
1031 Hello World for U (20 分) Given any string of N (≥5) characters, you are asked to form the chara ...
- mysql慢日志
mysql慢日志是用来记录执行时间比较长的sql工具(超过long_query_time的sql),这样对于跟踪有问题的sql很有帮助. 查看是否启用慢日志和相关信息 上面截图其中: log_slow ...