程序中的数据可以放在数据库里、可以存储在变量里,也可以存储在程序主体之外的文件里。外部文件与程序主体分离,有可能造成丢失或损坏,为避免丢失或损坏,编译器允许我们将外部文件编译进程序主体,成为程序主体不可分割的一部分。这就是传统意义上的程序资源(也称二进制资源)。

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刘铁锰相关推荐

  1. 《深入浅出WPF》笔记——绑定篇(一)

    上一节,有记录写到:在WPF里,数据驱动UI,数据占核心地位,UI次之.怎么恢复数据的核心地位,那就要先了解一下Binding. 一.Binding 基础 1.1WPF中Data Binding的带来 ...

  2. 深入浅出WPF学习笔记之Binding

    深入浅出WPF之Binding Binding Binding基础 Binding模型 把控件作为Binding源与Binding标记扩展 Binding的(Path)路径 Binding支持多级路径 ...

  3. 《深入浅出WPF》笔记——模板篇

    原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...

  4. 《深入浅出WPF》笔记——事件篇

    如果对事件一点都不了解或者是模棱两可的话,建议先去看张子阳的委托与事件的文章(比较长,或许看完了,也忘记看这一篇了,没事,我会原谅你的)http://www.cnblogs.com/JimmyZhan ...

  5. 深入浅出WPF开发下载

    为什么要学习WPF? 许多朋友也许会问:既然表示层技术那么多,为什么还要推出WPF作为表示层技术呢?我们话精力学习WPF有什么收益和好处呢,这个问题我们从两个方面进行回答. 首先,只要开发表示层程序就 ...

  6. WPF资源的基本概念

    WPF资源系统是一种保管一系列对象(如常用的画刷.样式或模版)的简单办法,从而更容易地复用这些对象. WPF允许在代码中以及在标记中的各个位置定义资源(和特定的控件.窗口一起定义,或在整个应用程序中定 ...

  7. WPF快速入门系列(6)——WPF资源和样式

    WPF快速入门系列(6)--WPF资源和样式 一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一 ...

  8. 深入浅出WPF(2)——解剖最简单的GUI程序

    深入浅出WPF(2)--解剖最简单的GUI程序 小序: 从这篇文章开始,我们进行XAML语言的上手学习.说实话,XAML这种语言一点也不难.如果把XML看成是"父类",那么XAML ...

  9. WPF 资源路径设置

    今天使用WPF开发 开发中自定义控件 使用了图片  当 图片的宿主不是Image 的时候路径就会有点不对 留下 笔记  自用 Xaml 代码 <Border x:Name="b_but ...

  10. 《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)

    原文地址为: <深入浅出WPF>系列视频(特辑)--MVVM入门与提高(难度300+) <深入浅出WPF>系列视频(特辑)--MVVM入门与提高(难度300+) 一年多没有推出 ...

最新文章

  1. 3D目标检测深度学习方法之voxel-represetnation内容综述(二)
  2. 初学编程的小白 | 每日趣闻
  3. 人人都来写算法 之 快速排序
  4. python在什么系统写代码合适-python用什么软件写代码
  5. 实现map window.onload加载
  6. swift5以上版本的代理的实现,详细教你书写代理
  7. mysql + keepalived高可用
  8. UVALive 4975 Casting Spells
  9. python multiprocessing.Process 应用
  10. 03-es6语法 Promise 和 es8语法 async await 的了解和基本使用
  11. Moon转告给你一个比Log4net更好日志框架--TracerX Logger 及其对应的日志查看器
  12. 域内,如何限制一台电脑只能指定的域用户登录
  13. Spring 注解编程之注解属性别名与覆盖
  14. TTL转USB电路(CH340G)
  15. 如何选择嵌入式练手项目、嵌入式开源项目大全,嵌入式产品举例
  16. excel学习-添加控件
  17. 多组学联合分析整体思路
  18. Base64编码简介
  19. re.sub()用法的详细介绍
  20. deepin 服务器_深度官方并没有提供Deepin服务器版下载,也没有开发计划

热门文章

  1. windows定制ISO-可安装
  2. java各种异常总结
  3. 干货 | 【备考PMP】 鬼知道经历了什么,成功拿下5A成绩~
  4. BAT面试高级进阶,Java架构师之路
  5. JAVA架构师学习路线图(绝对详细)
  6. Linux常用命令大全——赶紧收藏
  7. 保姆级教程:个人深度学习工作站配置指南
  8. 大数据:数据大合集,你想要的这里或许会有
  9. qmc0文件怎么转换mp3_怎么用手机把手机里的视频转换成mp3音乐?(手机,不是电脑)...
  10. js生成xlsx/xls格式文件并下载到本地