我的汇编包含一个BuildAction==Resource的图像。我想从这个嵌入式资源获取一个BitmapImage。
我可以像这样从文件加载一个BitmapImage:
var bitmap = new BitmapImage(new Uri(path));
但是我该如何创建一个指向嵌入资源图像的Uri呢?当我尝试创建打包URI(例如pack://application:,,,/MyImage.png
或pack://application:,,,/MyAssembly;component/MyImage.png
)时,会抛出异常:System.UriFormatException "无效的 URI:因为存在冒号(“:”),所以预期端口,但无法解析该端口。"在这篇博客文章中找到了解决UriFormatException的方法。然而,在应用此修复程序后,仍然会发生异常,尝试从pack URI加载BitmapImage时也会出现异常。当使用pack://application:,,,/Image.png
格式时,会出现NullReferenceException,当使用pack://application:,,,/AssemblyName;component/Image.png
格式时,会出现NotSupportedException "未识别 Uri 前缀"。摘要我的问题是我试图在任何WPF控件/窗口等实例化之前使用'pack URI',因此'pack' URI方案尚未注册(其他WPF所需的"东西"也不能设置,因为手动注册pack方案本身并不能解决问题)。解决方案是等到实例化我的WPF用户控件后再使用pack URIs。