1.一般程序的资源可以分为四个等级:

  • 数据库中的数据相当于放在仓库里
  • 资源文件里的数据相当于放在旅行箱里
  • WPF对象资源里的数据相当于携带在背包里
  • 变量中的数据相当于拿在手里

2.资源的查找顺序是沿着逻辑树向上一级控件查找,如果连顶级容器都没有就会去程序级Application.Resources中查找;如果还是没有找到则会抛出异常。

3.静态资源(StaticResource)和动态资源(DynamicResource)

  • 静态资源是在程序载入内存时对资源的一次性使用,之后就不会再去访问这个资源了。
  • 动态资源是程序运行过程中仍然会区访问资源。
<Window.Resources>
<TextBlock x:Key="str1" Text="海内存知己" />
<TextBlock x:Key="str2" Text="海内存知己" />
</Window.Resources>
<Grid>
<StackPanel>
<Button x:Name="btn1" Content="{StaticResource str1}" Height="60"/>
<Button x:Name="btn2" Content="{DynamicResource str2}" Height="60"/>
<Button x:Name="update" Margin="10" Width="120" Content="更新资源" Click="update_Click"/>
</StackPanel>
</Grid>

  

/// <summary>
/// 更新资源
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void update_Click(object sender, RoutedEventArgs e)
{
this.Resources["str1"] = new TextBlock() { Text = "天涯若比邻" };
this.Resources["str2"] = new TextBlock() { Text = "天涯若比邻" };
}

  

4.程序中添加二进制资源(程序级资源),这个在Net FrameWork体系下大家很熟悉了,就不做说明了

5.WPF中的Pack Uri,这里重点说明下《引用程序集的资源文件》

编译到引用的程序集中的资源文件的 pack URI 使用以下授权和路径:

  • 授权:application:///。

  • 路径:编译到所引用程序集内的资源文件的名称。 路径必须符合以下格式:

    AssemblyShortName{;版本] {;PublicKey]; 组件/路径

    • 程序集短名称:所引用的程序集的短名称。

    • ;版本 [可选]:所引用的包含资源文件的程序集的版本。 此部分在加载两个或多个具有相同短名称的引用程序集时使用。

    • ;公钥 [可选]:用于对引用程序集进行签名的公钥。 此部分在加载两个或多个具有相同短名称的引用程序集时使用。

    • ;组件:指定所引用的程序集是从本地程序集引用的。

    • /路径:资源文件的名称,包括其相对于所引用程序集的项目文件夹根目录的路径。

下面的示例演示一个资源文件的 pack URI XAML ,该资源文件位于所引用程序集的项目文件夹的根目录中。

pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml

下面的示例演示一个资源文件的 pack URI XAML ,该资源文件位于所引用程序集的项目文件夹的子文件夹中。

pack://application:,,,/ReferencedAssembly;component/Subfolder/ResourceFile.xaml

下面的示例演示一个资源文件的 pack URI,该 XAML 资源文件位于所引用的特定于版本的程序集的项目文件夹的根文件夹中。

pack://application:,,,/ReferencedAssembly;v1.0.0.1;component/ResourceFile.xaml

请注意,所引用的程序集资源文件的 pack URI 语法只能与 application:///机构一起使用。 例如,WPF 不支持以下。

pack://siteoforigin:,,,/SomeAssembly;component/ResourceFile.xaml

5.2 标记中的绝对 Pack URI

5.3 标记中的相对 Pack URI

5.4 更多详细说明请阅读官方文档:https://docs.microsoft.com/zh-cn/dotnet/desktop/wpf/app-development/pack-uris-in-wpf?view=netframeworkdesktop-4.8#pack-uri-resolution

WPF之资源专题的更多相关文章

  1. WPF之资源字典zz

    最近在看wpf相关东西,虽然有过两年的wpf方面的开发经验,但是当时开发的时候,许多东西一知半解,至今都是模模糊糊,框架基本是别人搭建,自己也就照着模板写写,现在许多东西慢慢的理解了,回顾以前的若干记 ...

  2. WPF 之 资源(Resource)

    1.什么叫WPF的资源(Resource)? 资源是保存在可执行文件中的一种不可执行数据.在WPF的资源中,几乎可以包含图像.字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性. ...

  3. WPF 中资源路径的问题

    WPF 中资源路径的问题 1. 引用当前工程的资源(注意xxxx.png的build action 应设置为Resource 或Embedded Resource) <ImageBrush Im ...

  4. WPF样式资源文件简单运用

    WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...

  5. WPF 访问资源中的Storyboard

    原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...

  6. WPF学习资源整理

    WPF(WindowsPresentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的编程模型 ...

  7. WPF 调用资源图片

    原文:WPF 调用资源图片 最近做的wpf项目中,在开发的时候,把图片放到了bin下面,采用了imagePath =System.IO.Directory.GetCurrentDirectory()+ ...

  8. WPF - 资源收集

    原文:WPF - 资源收集 OpenExpressApp的UI现在是使用WPF,所以熟悉WPF是必须的,以下我将可能用到的一些相关内容随时记录下来,以备查阅.此篇文章将不断更新,感兴趣的可以看看,也欢 ...

  9. WPF 为资源字典 添加事件响应的后台类

    原文:WPF 为资源字典 添加事件响应的后台类 前言,有许多同学在写WPF程序时在资源字典里加入了其它控件,但又想写事件来控制这个控件,但是资源字典没有CS文件,不像窗体XAML还有一个后台的CS文件 ...

随机推荐

  1. redis连接池 go-redis

    为什么使用连接池? 首先Redis也是一种数据库,它基于C/S模式,因此如果需要使用必须建立连接,稍微熟悉网络的人应该都清楚地知道为什么需要建立连接,C/S模式本身就是一种远程通信的交互模式,因此Re ...

  2. iGuard和NFS文件同步的解决方案

    一般来说,从文件系统中获得文件变化信息,调用操作系统提供的 API 即可.Windows 操作系统上有个名为 ReadDirectoryChangesW 的 API 接口,只要监视一个目录路径就可以获 ...

  3. Linux centos7 nginx 平滑升级

    2021-08-19为了方便读者的阅读,该文通篇使用绝对路径,各位朋友们在实际上操作中可以根据实际情况编写路径(#^.^#)1. 当前环境 # system cat /etc/redhat-relea ...

  4. Pytest 系列(26)- 清空 allure 历史报告记录

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 背景 pytest 运行 测试用例 ...

  5. python 给多个变量赋值

    # assign values directly a = b = 'hello' a, b = 1, 2 print(b, type(b)) assert a == 1 and b == 2 # as ...

  6. 判断IE浏览器版本

    //判断IE浏览器版本 function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isI ...

  7. python模块--__future__(向上兼容模块)

    py2.7   unicode_literals 将字符串默认视为unicode, 即u'xxx'和'xxx'将是一样的, 而再想表示字节需用b'xxx'表示 division / 将表示正常除法操作 ...

  8. ysoserial exploit/JRMPClient

    ysoserial exploit/JRMPClient 上一篇文章讲到,当服务器反序列化payloads/JRMPListener,即会开启端口监听.再使用exploit/JRMPClient模块发 ...

  9. 【第九篇】- Git 标签之Spring Cloud直播商城 b2b2c电子商务技术总结

    Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 xxx 项目发布一个"1.0"版本. ...

  10. 解决umount: /home: device is busy

    取消挂载/home时出现umount: /home: device is busy,        原因是因为有程序在使用/home目录,我们可以使用fuser查看那些程序的进程,        然后 ...