【WPF】资源--《深入浅出WPF》by刘铁锰
程序中的数据可以放在数据库里、可以存储在变量里,也可以存储在程序主体之外的文件里。外部文件与程序主体分离,有可能造成丢失或损坏,为避免丢失或损坏,编译器允许我们将外部文件编译进程序主体,成为程序主体不可分割的一部分。这就是传统意义上的程序资源(也称二进制资源)。
WPF不但支持程序级的传统资源,同时还推出了独具特色的对象级资源,每个界面元素可以携带自己的资源并可被自己的子级元素共享。模板、程序样式和主题就常常放在对象级资源里。这样一来,WPF程序中数据就分为四个等级存储:
- 数据库里的数据相当于存放在仓库里;
- 资源文件里的数据相当于放在旅行箱里;
- WPF对象资源里的数据相当于放在随身携带的背包里;
- 变量中的数据相当于拿在手里。
一、WPF对象级资源的定义与查找
WPF的界面元素都具有继承自FrameworkElement的Resources属性,其类型为ResourceDictionary。ResourceDictionary以“键--值”对的形式存储资源,当需要使用某个资源时,使用“键--值”对可以索引到资源对象。保存资源时,ResourceDictionary视资源对象为object类型,所以使用资源时要先对资源对象进行类型转换。xaml编译器能够根据标签自动识别资源类型,
类型不对则抛出异常。
<Window.Resources><sys:String x:Key="str">沉舟侧畔千帆过,病树前头万木春。</sys:String><sys:Double x:Key="db">3.1415926</sys:Double></Window.Resources><StackPanel><TextBlock Text="{StaticResource str}" Margin="15"/><!--<TextBlock Text="{StaticResource db}"/>--></StackPanel>
二、且“静”且“动”用资源
StaticResource指的是在程序载入内存时进行一次性使用,之后不再访问的资源
DynamicResource指的是在程序的运行过程中仍然会去访问的资源
<Window.Resources><TextBlock x:Key="res1" Text="海上生明月"/><TextBlock x:Key="res2" Text="海上生明月"/></Window.Resources><StackPanel><Button Margin="5 5 5 0" Content="{StaticResource res1}"/><Button Margin="5 5 5 0" Content="{DynamicResource res2}"/><Button Margin="5 5 5 0" Content="Update" Click="Button_Click"/></StackPanel>
private void Button_Click(object sender, RoutedEventArgs e){this.Resources["res1"] = new TextBlock() { Text = "天涯共此时" };this.Resources["res2"] = new TextBlock() { Text = "天涯共此时" };}
三、向程序中添加二进制资源
添加字符串资源:
<Window x:Class="IconDrawingByPath.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:IconDrawingByPath" xmlns:sys="clr-namespace:System;assembly=mscorlib"xmlns:prop="clr-namespace:IconDrawingByPath.Properties"mc:Ignorable="d"Title="BinaryResource" Height="200" Width="100"><Grid Margin="5"><Grid.ColumnDefinitions><ColumnDefinition Width="auto"/><ColumnDefinition Width="4"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="23"/><RowDefinition Height="4"/><RowDefinition Height="23"/></Grid.RowDefinitions><TextBlock Text="{x:Static prop:Resources.UserName}"/><TextBlock x:Name="textBlockPassword" Grid.Row="2"/><TextBox BorderBrush="Black" Grid.Column="2"/><TextBox BorderBrush="Black" Grid.Column="2" Grid.Row="2"/></Grid>
</Window>
C#代码访问Resources.resx资源:
public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.textBlockPassword.Text = Properties.Resources.Password;}}
运行效果:
使用Resources.resx最大的好处:便于国际化、本地化
四、使用Pack URI路径访问二进制资源
格式:[文件夹名称/]文件名称
【WPF】资源--《深入浅出WPF》by刘铁锰相关推荐
- 《深入浅出WPF》笔记——绑定篇(一)
上一节,有记录写到:在WPF里,数据驱动UI,数据占核心地位,UI次之.怎么恢复数据的核心地位,那就要先了解一下Binding. 一.Binding 基础 1.1WPF中Data Binding的带来 ...
- 深入浅出WPF学习笔记之Binding
深入浅出WPF之Binding Binding Binding基础 Binding模型 把控件作为Binding源与Binding标记扩展 Binding的(Path)路径 Binding支持多级路径 ...
- 《深入浅出WPF》笔记——模板篇
原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...
- 《深入浅出WPF》笔记——事件篇
如果对事件一点都不了解或者是模棱两可的话,建议先去看张子阳的委托与事件的文章(比较长,或许看完了,也忘记看这一篇了,没事,我会原谅你的)http://www.cnblogs.com/JimmyZhan ...
- 深入浅出WPF开发下载
为什么要学习WPF? 许多朋友也许会问:既然表示层技术那么多,为什么还要推出WPF作为表示层技术呢?我们话精力学习WPF有什么收益和好处呢,这个问题我们从两个方面进行回答. 首先,只要开发表示层程序就 ...
- WPF资源的基本概念
WPF资源系统是一种保管一系列对象(如常用的画刷.样式或模版)的简单办法,从而更容易地复用这些对象. WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件.窗口一起定义,或在整个应用程序中定 ...
- WPF快速入门系列(6)——WPF资源和样式
WPF快速入门系列(6)--WPF资源和样式 一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一 ...
- 深入浅出WPF(2)——解剖最简单的GUI程序
深入浅出WPF(2)--解剖最简单的GUI程序 小序: 从这篇文章开始,我们进行XAML语言的上手学习.说实话,XAML这种语言一点也不难.如果把XML看成是"父类",那么XAML ...
- WPF 资源路径设置
今天使用WPF开发 开发中自定义控件 使用了图片 当 图片的宿主不是Image 的时候路径就会有点不对 留下 笔记 自用 Xaml 代码 <Border x:Name="b_but ...
- 《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)
原文地址为: <深入浅出WPF>系列视频(特辑)--MVVM入门与提高(难度300+) <深入浅出WPF>系列视频(特辑)--MVVM入门与提高(难度300+) 一年多没有推出 ...
最新文章
- 3D目标检测深度学习方法之voxel-represetnation内容综述(二)
- 初学编程的小白 | 每日趣闻
- 人人都来写算法 之 快速排序
- python在什么系统写代码合适-python用什么软件写代码
- 实现map window.onload加载
- swift5以上版本的代理的实现,详细教你书写代理
- mysql + keepalived高可用
- UVALive 4975 Casting Spells
- python multiprocessing.Process 应用
- 03-es6语法 Promise 和 es8语法 async await 的了解和基本使用
- Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器
- 域内,如何限制一台电脑只能指定的域用户登录
- Spring 注解编程之注解属性别名与覆盖
- TTL转USB电路(CH340G)
- 如何选择嵌入式练手项目、嵌入式开源项目大全,嵌入式产品举例
- excel学习-添加控件
- 多组学联合分析整体思路
- Base64编码简介
- re.sub()用法的详细介绍
- deepin 服务器_深度官方并没有提供Deepin服务器版下载,也没有开发计划