我怎样才能从资源获取BitmapImage?
我的程序集包含BuildAction == Resource的图像。 我想从这个embedded式资源获取一个BitmapImage。
我可以像这样从文件加载一个BitmapImage:
var bitmap = new BitmapImage(new Uri(path));
但是,如何创build一个将引用embedded式资源图像的Uri?
当我尝试创build“ pack URI ”(例如pack://application:,,,/MyImage.png
或pack://application:,,,/MyAssembly;component/MyImage.png
)时,会引发exception:
System.UriFormatException“无效的URI:因为存在冒号(':')而期望端口,但是端口不能被分析。
我发现修复,在这篇博客文章的UriFormatException
但是,应用该修复程序,我仍然收到exception,尝试从pack URI中加载BitmapImage。
当使用pack://application:,,,/Image.png
格式时,我得到一个NullReferenceException,并且在使用pack://application:,,,/AssemblyName;component/Image.png
格式时,我得到一个NotSupportedException “Uri前缀不被识别”。
总结我的问题是,我正在尝试在任何WPF控件/窗口/ etc被实例化之前在一个进程中使用“pack URI”,所以“pack”URIscheme还没有注册(其他WPF所需的东西也必须不要太设置,因为手动注册包scheme本身并不能解决问题)。 解决scheme是等到实例化我的WPF usercontrol使用包URI。
此MSDN页面包含有关WPF中的资源URI(通常称为pack URI)的所有信息。 你会想要更频繁地使用相对的URI ,所以见表4 ,这应该是特别有用的。
如果您想要简要概述资源(包)URI,请参阅此博客文章 。 这表明语法确实比较简单:
pack://application:,,,/ResourceFile.xaml pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
然而,有一些怪癖(根据我的经验),经常find正确的资源URI需要一些实验。