创建BitmapImage时DirectoryNotFoundException

时间:2013-06-08 17:06:59

标签: c# wpf exception bitmapimage

我以DLL的形式开发了一个IOC框架,它创建了应用程序的主窗口,并在其中显示了各种WPF页面。有一个PNG图像文件夹,其Build Action设置为Resource。我使用这样的代码来设置WPF图像元素的来源...

MyImage.Source = new BitmapImage(new Uri("/MyAssembly;component/Images/MyImage.png", UriKind.Relative));

这很有效。但是,还有一个功能,用户可以选择在单独的窗口中显示其中一个WPF页面。这是一个谜:如果用户在单独的窗口中显示它之前导航到主窗口中的页面,一切都很好。但是,如果用户在主窗口中显示页面之前在单独的窗口中显示页面,我会得到DirectoryNotFoundException说“无法找到路径的一部分”C:\ MyAssembly; component \ Images \ MyImage .PNG”。“

我发现了OnLoad缓存选项并尝试了以下代码......

var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = new Uri("/MyAssembly;component/Images/MyImage.png", UriKind.Relative);
image.EndInit();
MyImage.Source = image;

然而,我在我尝试创建的第一个图像上获得了DirectoryNotFoundException

我也试过了一个绝对的URI ......

MyImage.Source = new BitmapImage(new Uri("pack://application:,,,/MyAssembly;component/Images/MyImage.png", UriKind.Absolute));

然后我得到一个UriFormatException说“无效的URI:指定的端口无效。”

1 个答案:

答案 0 :(得分:1)

我通过使用问题所示的'pack'URI格式解决了这个问题。但是,在我这样做之前,我需要调用Application类。这具有执行应用程序的静态构造函数的效果,该构造函数注册“pack”URI方案。我找到了答案here。我使用的电话就是这样:

var app = Application.Current;