我以 DLL 的形式开发了一个 IOC 框架,它创建应用程序的主窗口并在其中显示各种 WPF 页面。有一个 PNG 图像文件夹,其 Build Action 设置为 Resource。我使用这样的代码来设置 WPF Image 元素的来源......
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:指定的端口无效”。