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