Comment puis-je lister les couleurs dans WPF avec XAML?

Comment obtenir la liste de toutes les couleurs que je peux sélectionner dans Visual Studio Designer ( System.Windows.Media.Colors , mais ce n’est pas une collection) et les placer dans ma propre ComboBox aide des balises WPF et XAML?

Voici la solution XAML pure.

Dans votre section ressources, vous utiliseriez ceci:

  .. xmlns:sys="clr-namespace:System;assembly=mscorlib" ..   System.Windows.Media.Colors, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35     

Ou, comme le souligne CodeNaked , il peut être réduit à une balise:

  

Et puis la liste déroulante ressemblerait à ceci:

  

Voici un excellent ItemTemplate à utiliser pour une liste déroulante utilisant le code de casperOne :

           

Voici ce que j’ai fait dans une ancienne application ASP.net:

 // populate colors drop down (will work with other kinds of list controls) Type colors = typeof(System.Drawing.Color); PropertyInfo[] colorInfo = colors.GetProperties(BindingFlags.Public | BindingFlags.Static); foreach ( PropertyInfo info in colorInfo) { ddlColor.Items.Add(info.Name); } // Get the selected color System.Drawing.Color selectedColor = System.Drawing.Color.FromName(ddlColor.SelectedValue); 

Voici comment le faire en code en utilisant la reflection. Les éléments suivants déchargeront tous les noms de couleurs WPF prédéfinis dans Sortie:

 using System.Reflection; void ListAllColors() { Type colorsType = typeof(System.Windows.Media.Colors); PropertyInfo[] colorsTypePropertyInfos = colorsType.GetProperties(BindingFlags.Public | BindingFlags.Static); foreach (PropertyInfo colorsTypePropertyInfo in colorsTypePropertyInfos) Debug.WriteLine(colorsTypePropertyInfo.Name); } 

Et pour les mettre dans une liste déroulante, vous pouvez simplement changer la dernière ligne en:

 _comboBox.Items.Add(colorsTypePropertyInfo.Name);