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 ...
随机推荐
- 用 Fiddler查看 Android 网络请求
1. 下载安装 fiddler,尽量到官方网站找最新的版本 备注:安装后,打开的时候如果报错: Machine-wide Progress Telerik Fiddler installation h ...
- Jenkins升级、迁移、备份
1.升级 下载新版Jenkins.war文件,替换旧版本war文件,重启即可. Jenkins.war文件的位置一般为/usr/lib/jenkins/Jenkins.war. 2.迁移.备份 Jen ...
- 170720、springboot编程之properties文件讲解
但是在实际开发过程中有更复杂的需求,我们在对properties进一步的升华.在本篇博客中您将会学到如下知识(这节中有对之前的知识的温故,对之前的升华): (1) 在application.prope ...
- JavaCSV之写CSV文件
与JavaCSV读CSV文件相对应,JavaCSV也可以用来写数据到CSV文件中. 1.准备工作 (1)第三方包库下载地址:https://sourceforge.net/projects/javac ...
- oracle goldengate技术架构-简单试验(全)
一 GoldenGate简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源 数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库, ...
- c# 自定义控件之小小进度条
先看效果图: 非常简洁的一个进度条. 完整项目源码下载:http://files.cnblogs.com/files/tuzhiyuan/%E8%BF%9B%E5%BA%A6%E6%9D%A1%E6% ...
- 多线程下载图片,滑动tableView崩溃--资源抢夺问题
最近练习使用NSoperation模拟SDWebImage下载图片,发生了崩溃的问题,还专门写博客记录这件事情: http://www.cnblogs.com/tufei7/p/7074030.htm ...
- Currency Exchange---poj1860 ( spfa, 回路,最长路)
题目链接:http://poj.org/problem?id=1860 题解: 两种情况YES,一种是存在正权回路: 一种是求最长路后,实现了增值,也是YES: 用spfa来判断是否存在正权回路,其实 ...
- centos LAMP第三部分php,mysql配置 php配置文件 配置php的error_log 配置php的open_basedir 安装php的扩展模块 phpize mysql配置第二十一节课
centos LAMP第三部分php,mysql配置 php配置文件 配置php的error_log 配置php的open_basedir 安装php的扩展模块 phpize mysql配 ...
- in 和 or 的效率问题
select * from table where col in (2,3,4,5,6) select * from table where col=2 or col=3 or col=4 or co ...