1

我以 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:指定的端口无效”。

4

1 回答 1

1

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

var app = Application.Current;
于 2013-06-10T15:05:30.327 回答