1

我想在我的listBox. 我也对字体使用相同的东西,但我不知道颜色。我的意思是,我不知道如何枚举所有已知的颜色。

foreach (FontFamily F in Fonts.SystemFontFamilies)
        {
            ListBoxItem l = new ListBoxItem();
            l.Content = F.ToString();
            l.FontFamily = F;
            listbox1.Items.Add(l);
        }

如何做同样的事情Color

4

4 回答 4

2

您可以从KnownColor获取颜色

KnownColor[] colors  = Enum.GetValues(typeof(KnownColor));
foreach(KnownColor knowColor in colors)
{
  Color color = Color.FromKnownColor(knowColor);

    ListBoxItem listItem = new ListBoxItem();
    listItem.Content = color.ToString();
    listItem.Color = color ;
    listbox1.Items.Add(listItem);
}

是检索颜色的示例。

于 2012-10-04T04:50:14.613 回答
2

Color是一个结构,因此不在 的范围内IEnumerable,所以你必须像这样:

    foreach (Color color in Enum.GetValues(typeof(KnownColor))
    {
        ListBoxItem l = new ListBoxItem();
        l.Content = color.Name;
        l.Color = color;
        listbox1.Items.Add(l);
    }
于 2012-10-04T00:31:16.850 回答
1

你也可以试试这个

链接到文章

private List finalColorList()
{ 
    string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
    string[] systemEnvironmentColors = 
        new string[(
        typeof(System.Drawing.SystemColors)).GetProperties().Length];

    int index = 0;

    foreach (MemberInfo member in (
        typeof(System.Drawing.SystemColors)).GetProperties())
    {
        systemEnvironmentColors[index ++] = member.Name;            
    }

    List finalColorList =  new List();

    foreach (string color in allColors)
    {
        if (Array.IndexOf(systemEnvironmentColors, color) < 0)
        {
            finalColorList.Add(color);
        }                           
    }
    return finalColorList;
}
于 2012-10-04T04:09:11.877 回答
1
    var colorProperties = Colors.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public);
    var colors = colorProperties.Select(prop => (Color)prop.GetValue(null, null));
    foreach(Color c in colors)
    {
        ListBoxItem l = new ListBoxItem();
        l.Content = c.ToString();
        l.Color = c;
        listbox1.Items.Add(l);
    }
于 2012-10-04T00:54:39.037 回答