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 ...
随机推荐
- Spring容器装配Bean的三种方式
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...
- hello gradle
首先下载和安装gradle可以参考官网下载地址,建议下载带有源码和文档的,以便后期查阅. 下载完以后打开终端输入gradle -v有如下信息输出,表示安装成功: bogon:gradle scott$ ...
- 使用Dataset构建数据到lgb中
训练数据要放到Dataset中供lgb使用,构建数据如下: import lightgbm as lgb import numpy as np # 训练数据,500个样本,10个维度 train_da ...
- ClassicLink互通原理
ClassicLink概述_ClassicLink_用户指南_专有网络 VPC-阿里云 https://help.aliyun.com/document_detail/65412.html Class ...
- rpc、socket、mq
关于RPC与MQ异同的理解 相同:1.都利于大型系统的解耦:2.都提供子系统之间的交互,特别是异构子系统(如java\node等不同开发语言):不同:1.RPC侧重功能调用,因此多半是同步的:备注:也 ...
- Openstack(九)部署nova服务(控制节点)
9.1nova服务介绍 nova是openstack最早的组件之一,nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nov ...
- 超全超详细的 ADB 用法大全
原文地址:原文地址 基本用法 命令语法 为命令指定目标设备 启动/停止 查看 adb 版本 以 root 权限运行 adbd 指定 adb server 的网络端口 设备连接管理 查询已连接设备/模拟 ...
- #C++初学记录 (第一次测试)(A - 复习时间 )
练习题目一 (A-复习时间) 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的 ...
- zw黑天鹅足彩实盘测试5月数据包
[文件说明] $mx1,是单日数据:$mx9,是日数据和 入选率:2%, 准确度:40% 盈利率:120%左右 目前在测试稳定性 5月1日-6月14日,实盘数据 $mx9,15061409x15061 ...
- Kernel space是啥?
今天因为查一个Java zero copy的问题,遇到了kernel space.之前是耳闻过内核空间的,但是看到kernel space不知道是啥.知道的太少,除了学习,我也做不了啥.因为自己认知有 ...