WPF 使用 VisualStudio 2017 项目文件

本文告诉大家如何在 WPF 访问解决方案的文件

在 WPF 如果需要访问项目的文件,如在项目文件放一张图片,需要在 xaml 或后台代码读取,这个就是需要用到本文的技术。

假如在 项目文件 放一张图片,首先新建一个项目,然后随意找一张图片,放在项目上

注意需要查看图片的属性,如果图片的生成不是 Resources 那么在使用下面的代码还是找不到

最简单在 xaml 获取项目文件的方式是直接写相对 xaml 的路径,下面的代码写在主界面

        <Image Source="22f0c4ae0afad5e2fd91a6dcff052f2b.jpg"></Image>

如果放在另一个文件夹的 xaml 相对于图片是下一级,就需要使用下面代码

        <Image Source="../22f0c4ae0afad5e2fd91a6dcff052f2b.jpg"></Image>

因为很容易移动 xaml 文件所在的文件夹,如果移动了文件夹,那么刚才的路径就需要修改,所以建议写绝对路径。

绝对路径的写法是 pack://application:,,,/ 后面添加解决方案的路径。

如在上图,解决方案里的 22f0c4ae0afad5e2fd91a6dcff052f2b.jpg 相对于解决方案是在根目录,所以可以这样写

        <Image Source="pack://application:,,,/22f0c4ae0afad5e2fd91a6dcff052f2b.jpg"></Image>

如果需要跨程序集访问,如我再创建一个项目B,让刚才 A 项目引用 B 项目,在 B 项目放一张图片,然后在 A 项目引用B项目的图片 NearzooRasterCairralJeajismowwir.jpg 就需要在路径写上程序集

现在需要访问 B 项目的 NearzooRasterCairralJeajismowwir.jpg 就需要使用pack://application:,,,/B;component/NearzooRasterCairralJeajismowwir.jpg,格式就是pack://application:,,,/程序集;component/相对B项目的文件,需要注意右击看文件是不是 Resources 如果不是还是无法找到

        <Image Source="pack://application:,,,/B;component/NearzooRasterCairralJeajismowwir.jpg"></Image>

需要知道,程序集和项目的名字是可以不相同的,如刚才的 B 项目,实际上程序集和项目名字不相同,请看下图

所以发现自己找不到资源,可能是项目名字和程序集不相同,需要右击查看程序集

        <Image Source="pack://application:,,,/lindexi;component/NearzooRasterCairralJeajismowwir.jpg"></Image>

如果引用了相同程序集的不同版本,就需要在路径写上版本,格式是pack://application:,,,/程序集;版本;component/文件相对根目录,具体代码请看下面

       <Image Source="pack://application:,,,/lindexi;v1.0.0.0;component/NearzooRasterCairralJeajismowwir.jpg"></Image>

在后台访问解决方案的文件和在 xaml 访问的方法差不多,也是需要用到路径,只是调用的方法不相同

            var resourceStream = Application.GetResourceStream(new Uri("pack://application:,,,/lindexi;component/NearzooRasterCairralJeajismowwir.jpg"));

            if (resourceStream != null)
            {
                var stream = resourceStream.Stream;
            }

参见:Pack URIs in WPF

win10 uwp 访问解决方案文件


本文会经常更新,请阅读原文: https://lindexi.gitee.io/lindexi/post/WPF-%E4%BD%BF%E7%94%A8-VisualStudio-2017-%E9%A1%B9%E7%9B%AE%E6%96%87%E4%BB%B6.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://lindexi.gitee.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白课代表

编程工具 | PyCharm 2017.3 安装教程

17740
来自专栏运维

我用Fedora19 办公

2013年7月2号Fedora19发布了,据说是可以替换Mac和Windows的系统!!!

12610
来自专栏Vamei实验室

Linux进程关系

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! Linux的进程相互之间有一定的关系。比如...

29850
来自专栏张戈的专栏

Windows 7下获取System权限

公司推 Win7 了,作为 IT 部门,铁定是先行测试的小白鼠。于是先给我们安装了 Win7 工作环境。一直以来,除了服务器,普通办公 PC 的管理员都是被桌面...

45640
来自专栏FreeBuf

CVE-2016-10277在MOTO X手机上的漏洞利用实践

CVE-2016-10277是存在于摩托罗拉系列手机的bootloader高危漏洞,可以通过内核命令注入劫持手机的启动流程,加载攻击者控制的initramfs,...

32070
来自专栏乐百川的学习频道

在虚拟磁盘中安装Windows Server 2016

说起来我一直没有安装过Windows服务器版的系统,所以最近想尝试一下Windows Server 2016,这个最新的Windows服务器系统。当然如果是家用...

60660
来自专栏FreeBuf

PowerShell-RAT:一款基于Python的后门程序

今天给大家介绍的是一款名叫Powershell-RAT的Python后门,它可以利用Gmail邮件附件来从目标用户的设备中提取数据。这款RAT可以帮助红队测试人...

21350
来自专栏FreeBuf

你可曾想过在iOS上跑Linux?

你可曾想过在IOS设备上运行Linux系统?或者用shell来传输文件、编写脚本,又或者使用Vi来开发代码?

17920
来自专栏林德熙的博客

通过命令行使用微信

虽然本渣是使用 windows 微信也有 UWP 的,但是微信还是不太清真,所以我就找到一个控制台的微信,可以在控制台使用微信。

50820
来自专栏逍遥剑客的游戏开发

C#脚本实践(三): 集成到游戏

18120

扫码关注云+社区

领取腾讯云代金券