0

C# - 从不同程序集中的文件资源加载图像

我有一个 PNG 图像文件,它存储在一个名为 SomeProject 的项目中,并在同一个项目中使用 XAML 多次显示。在另一个程序集中,我现在希望访问同一个图像。以前我只是简单地指定了一个工作正常的实际文件的相对路径。但是,当我构建发布安装程序时,图像文件被打包到 SomeProject.DLL 中。

有什么简单的方法可以从另一个程序集中访问 PNG 文件,而无需简单地将文件本地复制到第二个项目?我虽然可能使用'pack://',但我运气不佳。

// SomeOtherProject.SomeClass.cs ...

Image logo = new Image();
BitmapImage logoSource = new BitmapImage();
eChamSource.BeginInit();

// Following line works fine is Visual Studio, but obviously not after installation
// logoSource.UriSource = new Uri(@"..\SomeProject\Resources\Images\logo.png", UriKind.Relative);

logoSource.UriSource = new Uri("pack://application:,,,/SomeProject;component/Resources/Images/logo.png");
logoSource.EndInit();

logo.Width = 100; logo.Height = 100;
logo.Source = logoSource;

任何建议都会很好。

4

2 回答 2

1

如果您希望使用的图像原样Contentanother assembly您必须copy将它们保存到main projects directory.

您可以使用 Build 事件来执行此操作:

右键单击包含images -> Properties -> Buil Events ->编辑后构建的项目以将图像复制到main project directory.

然后你必须将它用作

pack://application:,,,/ContentFile.xaml

(或者)

如果您在子文件夹中需要它

pack://application:,,,/Subfolder/ContentFile.xaml

看看这个 h 了解更多信息 http://msdn.microsoft.com/en-us/library/aa970069.aspx

于 2012-05-01T10:13:00.993 回答
1

尝试加载您的其他程序集,如下所示:

Application.LoadComponent(new Uri(@"AnotherAssembly;;;component\AnotherResourceFilePath/logo.png", UriKind.Relative)));

LoadComponent 函数返回一个对象。您可以将其转换为适当的类型。

于 2012-05-01T11:25:05.670 回答