2010-10-14 11 views
1

je donne les résultats suivants:System.Windows.Media.Color au nom de la couleur

Color color = Colors.Red; 
color.ToString(); 

qui sort comme la représentation hexadécimale. Est-il possible de sortir "Rouge"? Le point de bonus à celui qui donne une solution qui fonctionne avec différentes cultures (c'est-à-dire la sortie "Rojo" pour l'espagnol).

+0

Vous devez définir une prime si vous voulez attribuer des points bonus. –

+0

Comment créer une prime? –

Répondre

8

Il semble que vous deviez rouler manuellement votre propre solution à l'aide de Reflection. Voici mon premier coup:

public static string GetColorName(this System.Windows.Media.Color color) 
{ 
    Type colors = typeof(System.Windows.Media.Colors); 
    foreach(var prop in colors.GetProperties()) 
    { 
     if(((System.Windows.Media.Color)prop.GetValue(null, null)) == color) 
      return prop.Name; 
    } 

    throw new Exception("The provided Color is not named."); 
} 

Gardez à l'esprit que c'est pas efficace, mais de ce que je peux voir dans la documentation que ce serait la seule façon.

+0

Ceci est pour Windows Phone 7 donc je me demande si ce code passerait la certification –

+0

@Jonas Eh bien, vous pourriez simplement exécuter ce code une fois et créer un dictionnaire de couleurs connues, et le stocker comme une ressource. –

0

Une option pourrait consister à convertir le Media.Color à un Drawing.Color

private System.Drawing.Color ColorFromMediaColor(System.Windows.Media.Color clr) 
{ 
    return System.Drawing.Color.FromArgb(clr.A, clr.R, clr.G, clr.B); 
} 

Ensuite, utilisez la propriété Nom de l'objet Drawing.Color pour obtenir le nom de la couleur. En ce qui concerne la localisation, vous pouvez rechercher le color name dans un dictionnaire de traduction construit à partir de fichiers de ressources que vous fournissez.

+1

Cela ne fonctionnera certainement pas car color.name ne recherchera pas toutes les couleurs que vous créez. –

+0

La question a demandé le nom de la couleur pour les objets de couleur intégrés, par ex. Color.Red, pas arbitraires créés par l'utilisateur, donc cela devrait fonctionner. – Handcraftsman

+0

Désolé, cela ne fonctionne pas car System.Drawing ne fait pas partie du CLR Silverlight –