我创建了一个用于封装我的图像的DLL,之后我想从DLL中获取图像名称作为列表。在发布这篇文章之前,我用Google搜索了一下,我看到了一个下面的例子。
public static List<string> GetImageList()
{
List<string> imageList;
System.Reflection.Assembly BOAUIResources = System.Reflection.Assembly.GetExecutingAssembly();
string[] resources = BOAUIResources.GetManifestResourceNames();
return resources.ToList<string>();
}
此代码只是访问构建动作属性的图像名称是“嵌入式资源”。因为在WPF中访问,我的图像构建动作类型必须定义为“资源”。
那么如何列出图像名称,构建动作属性被定义为资源,来自DLL?
答案 0 :(得分:2)
图像资源可以通过几种不同的方式添加到程序集中,这会对枚举图像名称的代码产生一些影响。
您在问题中提供的代码示例将适用于第二种情况。但请注意,它还会列出任何其他清单资源(例如嵌入的resx文件),而不仅仅是您的图像。
如果您已将图片添加到resx文件,则可以使用从ResourceSet
获得的ResourceManager
枚举资源:
// This requires the following using statements in the file:
// using System.Resources;
// using System.Collections;
ResourceManager rm = new ResourceManager(typeof(Images));
using (ResourceSet rs = rm.GetResourceSet(Thread.CurrentThread.CurrentUICulture, true, true))
{
IDictionaryEnumerator resourceEnumerator = rs.GetEnumerator();
while (resourceEnumerator.MoveNext())
{
if (resourceEnumerator.Value is Image)
{
Console.WriteLine(resourceEnumerator.Key);
}
}
}
在第一行中,它显示ResourceManager(typeof(Images))
,您需要将Images
与您的图片所在的资源文件的名称进行交换(在我的示例中,它被称为“图像”的.resx“)。
答案 1 :(得分:2)
试试这个。 (摘自本书 - 由Chris Sells编写的WPF编程,Ian Griffiths)
public static List<string> GetImageList()
{
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
System.Globalization.CultureInfo culture = Thread.CurrentThread.CurrentCulture;
string resourceName = asm.GetName().Name + ".g";
System.Resources.ResourceManager rm = new System.Resources.ResourceManager(resourceName, asm);
System.Resources.ResourceSet resourceSet = rm.GetResourceSet(culture, true, true);
List<string> resources = new List<string>();
foreach (DictionaryEntry resource in resourceSet)
{
resources.Add((string)resource.Key);
}
rm.ReleaseAllResources();
return resources;
}