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 ...
随机推荐
- Redis的简单了解以及主从复制
1.Redis的简单了解 Redis是一种高性能的分布式NoSql数据库,持久存储,高并发,数据类型丰富,通过现场申请内存空间,同时可以配置虚拟内存.五种数据类型:string(字符串,这种格式和me ...
- RPN网络
Region Proposal Network RPN的实现方式:在conv5-3的卷积feature map上用一个n*n的sliding window(论文中n=3)生成一个长度为256(ZF网络 ...
- Puppet学习:Augeas的怪问题
今天测试部署Zabbix,本来以前是正常的,今天莫名其妙报错.测试后发现是Augeas出现问题,无论如何都不执行.于是采用调试模式: puppet agent --test --verbose --d ...
- pandas 取消读取csv时默认第一行为列名
读取时默认第一行为列名 此时DataFrame的列名为第一行数据: 因为第一行为有效数据,故不可作为列名,要么重新起列名,要么使用默认序列列名: 取消默认第一行为列名 给 pd.read_csv() ...
- 【Loadrunner】性能测试报告实战
一.一份好的性能测试报告需要遵循什么规则? 好的报告只需要遵循3点即可:清晰的结构.简要的语言以及数据的对比. 二.如何用Loadrunner自动到处HTML以及word版的报告? 1.导出html格 ...
- google浏览器插件安装
1:安装本地插件,直接将下载好的crx插件拖入到 chrome://extensions/ 的空白处 http://www.cnplugins.com/tool/outline-instal ...
- PAT 1043 Is It a Binary Search Tree[二叉树][难]
1043 Is It a Binary Search Tree(25 分) A Binary Search Tree (BST) is recursively defined as a binary ...
- python16_day39【算法】
复习: 1.递归 调用自身 结束条件 一.冒泡算法 def bubble_sort(numbs): for i in range(len(numbs)-1): # 这个循环负责设置冒泡排序进行的次数. ...
- Codeforces Round #528 Solution
A. Right-Left Cipher Solved. 注意长度的奇偶 #include <bits/stdc++.h> using namespace std; string s; i ...
- poj1151 Atlantis && cdoj 1600艾尔大停电 矩形面积并
题目: Atlantis Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 23758 Accepted: 8834 Des ...