2009-06-25 8 views
0

J'ai créé une DLL pour encapsuler mes images et ensuite je veux obtenir des noms d'image à partir de DLL sous forme de liste. Avant de poster ce post, j'ai cherché sur Google et j'ai vu un exemple ci-dessous.Obtention de noms d'image à partir d'une DLL en tant que liste?

public static List<string> GetImageList() 
{ 
    List<string> imageList;    
    System.Reflection.Assembly BOAUIResources = System.Reflection.Assembly.GetExecutingAssembly(); 
    string[] resources = BOAUIResources.GetManifestResourceNames(); 
    return resources.ToList<string>(); 
} 

Ce code juste accès à des noms d'image qui construisent la propriété d'action est "ressource intégrée". en raison de l'accès en WPF, mon type d'action de construction d'images doit définir comme "ressource".

Alors Comment puis-je lister les noms d'image, que la propriété d'action de construction est définie comme ressource, à partir de DLL?

Répondre

2

Essayez ceci. (Tiré du livre - Programmation WPF Par Chris Sells, 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; 
      } 
+0

Fonctionne bien! Merci d'avoir partagé cet exemple. – jpierson

2

Les ressources d'images peuvent être ajoutées à un assemblage de plusieurs manières différentes, ce qui aura un impact sur le code pour énumérer les noms d'image.

  • Vous pouvez ajouter des images à un fichier resx.
  • Vous pouvez ajouter les images directement à la solution (comme avec vos fichiers de code) et définir leur action de construction sur 'Embedded Resource'.

L'exemple de code que vous avez fourni dans votre question fonctionnera dans le second cas. Notez cependant qu'il listera également toutes les autres ressources manifestes (telles que les fichiers resx incorporés) et pas seulement vos images.

Si vous avez ajouté les images dans un fichier resx vous pouvez énumérer les ressources en utilisant un ResourceSet obtenu à partir d'un 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); 
     } 
    } 
} 

Dans la première ligne, où il est dit ResourceManager(typeof(Images)), vous aurez besoin d'échanger Images avec le nom du fichier de ressources dans lequel se trouvent vos images (dans mon exemple, il s'appelait "Images.resx").

+0

Tout d'abord je vous remercie pour votre réponse. Vous avez parlé de deux façons d'ajouter des images dans un assemblage. Oui bien sûr, si nous ajoutons des images dans le fichier resx, votre code fonctionnera. Mais nous préparons des interfaces utilisateur avec Windows Presentation Foundation et nous pouvons accéder à des images ajoutées uniquement en tant que «ressource» dans l'assemblage. Dans ces circonstances, y a-t-il un moyen d'énumérer les images ajoutées comme «ressources» dans l'assemblage? – okkesemin

+0

Si je comprends bien votre question (vous ajoutez les fichiers image en tant qu'éléments de solution dans Visual Studio et définissez leur action de construction sur ressource incorporée), l'exemple de code dans votre question doit répertorier les noms d'image (mais pas seulement liste les fichiers de resx incorporés). –

+0

Fredrik, une «ressource incorporée» est différente d'une «ressource» quand il s'agit d'actions de construction possibles. Cette dénomination que Microsoft a choisi provoque beaucoup de confusion et rend très difficile de faire des recherches pertinentes sur le web sur ce sujet mais les deux sont des bêtes très différentes. – jpierson

Questions connexes