wpf中内置资源文件

摘要:
wpf中有三种类型的文件类型资源文件:编译为可执行文件或库wpf程序集的数据文件。这三种类型的文件之间的一个重要区别是,资源文件和内容文件在生成时是已知的;程序集明确知道它们的存在。这种类型的应用程序数据文件称为“资源文件”。当资源文件编译到程序集后不需要更新资源文件的内容时,应使用资源文件。操作过程类似于资源文件。
wpf中包含三种文件类型
  • 资源文件:编译到可执行或库 WPF 程序集中的数据文件。

  • 内容文件:与可执行 WPF 程序集具有显式关联的独立数据文件。

  • 源站点文件:与可执行 WPF 程序集没有关联的独立数据文件。


这三种类型的文件之间的一个重要区别是:资源文件和内容文件在生成时是已知的;程序集明确地知道它们的存在。但是对于源站点文件,程序集可能完全不知道它们,或者通过 pack 统一资源标识符 (URI) 引用知道它们的存在;在后一种情况下,不能保证被引用的源站点文件实际存在。


说说资源文件的使用

如果应用程序数据文件必须始终可供某个应用程序使用,那么保证可用性的唯一方法是将其编译到应用程序的主可执行程序集中,或者它所引用的程序集中。这种类型的应用程序数据文件称为“资源文件”。

应在以下情况下使用资源文件:


步骤:
1.选择一个文件当中资源文件,随便的txt,xml,图片都可以的
2.添加到vs项目中。点击右键可以看到其中的action(生成操作)选项要是“resources”
3.然后写一个方法来读取内容
//我是添加了一个sn.txt文件当中资源文件,然后就是读取其中内容而言,比较简单
   Uri uri = new Uri("/sn.txt", UriKind.Relative);//这个就是所以的pack uri。
            StreamResourceInfo info = Application.GetResourceStream(uri);
            Stream s = info.Stream;
            byte[] buffer = new byte[2014];
            s.Read(buffer, 0,100);
            string x = Encoding.GetEncoding("gb2312").GetString(buffer);
            MessageBox.Show(x);

4编译以后。生成文件就是一个exe文件。可以把exe文件放到随便的一个地方。。都可以正常读取sn.txt文件。因为sn.txt文件已经被内置到exe中了

2.内容文件的使用

内容文件是作为松散文件与可执行程序集一起分发的。虽然它们不编译到程序集中,但编译程序集时所使用的元数据建立了与每个内容文件的关联。

如果应用程序需要一组特定的应用程序数据文件,并且您希望能够更新这些文件,而无需重新编译使用它们的程序集,则应该使用内容文件。

操作步骤和资源文件很类似。也是添加一个文件到vs中

但是要将“生成操作”设置为“内容”,还要将“复制到输出目录”设置为“始终复制”或者更新复制

代码也很一样

参考上面的资源文件列子

StreamResourceInfo info = Application.GetContentStream(url);//GetResourceStream(uri);


第三源站点文件

资源文件与同其一起分发的程序集有显式关系,这一关系由 AssemblyAssociatedContentFileAttribute 定义。但是,有些情况下可能需要在程序集和应用程序数据文件之间建立隐式关系或不存在的关系,这些情况包括:

使用传统的 URI 方案可以加载这些类型的文件,如 file:/// 和 http:// 方案。

<Image Source="file:///C:/DataFile.bmp" />
<Image Source="http://www.datafilewebsite.com/DataFile.bmp" />

源站点文件的操作前面的类似

添加到vs中文件的“生成操作”设置为“none”
或无
读取方法使用GetRemoteStream

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

免责声明:文章转载自《wpf中内置资源文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在Asp.net中为用户控件(.ascx)添加自定义属性详解js将汉字转为相应的拼音下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF在圆上画出刻度线

思路 我们可以使用Ellipse先画出一个圆当背景,然后用Canvas再叠加画上刻度线,就能得到如下的效果 我们先用Ellipse画一个橙色的圆,然后将Canvas的宽度和高度绑定到Ellipse的宽度和高度 <Grid> <Ellipse Fill="Orange" Width="400" Height="400" N...

WPF模式思考 (zt)

Introduction Since XAML things have become a bit complicated in trying to conceptualize MVC architectures for Windows applications. The gap between web and win is narrowing and th...

wpf mvvm datagrid DataGridTemplateColumn的绑定无效的可能原因之一!

昨天在mvvm wpf的开发中遇到一个问题,绑定不起作用,编辑阶段没问题也没有提示找不到对应的绑定,但是在运行之后却不起作用,查了很多资料,说法不一,有些是要删除datagrid的一行,直接绑定delete即可,但是我要绑定的是viewmodel的command,最终解决问题了,特分享如下(已解决): view: <DataGrid ItemsSou...

WPF使ListBox支持手势多选功能

手势功能在手持平台应用较为丰富,PC上的应用还不是很多,不过还是有一些软件已应用这个功能如遨游浏览器等,应用得当还是相当可以丰富用户的互交体验的。 接下来我将介绍如何为ListBox添加手势功能支持。 这里我们用到了InkCanvas,它有一个Gesture事件,在这个事件中我们可以得到我们所画出的形状的区域及 e.Strokes[0].GetGeomet...

2019-11-29-WPF-元素裁剪-Clip-属性

title author date CreateTime categories WPF 元素裁剪 Clip 属性 lindexi 2019-11-29 08:24:24 +0800 2019-1-3 15:57:0 +0800 WPF 本文介绍如何在 WPF 使用 Clip 裁剪元素 在 WPF 的 UIElement 提供了 Clip 属性...

WPF中TreeView的展开 (转)

http://blog.163.com/qiulei_21/blog/static/35071722201122452818390/ 在网上找了很多资料,但是都是云山雾绕的,看了很久看不懂,今天终于在我同事的帮助下搞定了,要充分利用TreeViewItem的IsExpanded属性啊。 任务:树节点的展开,包括全展开,点击节点的展开,某一层节点的展开。...