循环遍历所有颜色?

时间:2011-01-29 02:03:35

标签: c# silverlight windows-phone-7

我正在使用C#(Windows-Phone-7)中的应用程序,我正在尝试做一些简单的事情,让我感到难过。

我想循环浏览颜色中的每个颜色,并将颜色名称写入文件(以及其他内容)。

我有最简单的代码,我知道这些代码不起作用,但我写信开始:

foreach (Color myColor in Colors)
{
}

当然,这给了我以下语法错误:

'System.Windows.Media.Colors'是'type',但用作'变量'。

有办法做到这一点吗?看起来很简单!

3 个答案:

答案 0 :(得分:7)

您可以使用此辅助方法获取每个Color的名称/值对的Dictionary。

public static Dictionary<string,object> GetStaticPropertyBag(Type t)
    {
        const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;

        var map = new Dictionary<string, object>();
        foreach (var prop in t.GetProperties(flags))
        {
            map[prop.Name] = prop.GetValue(null, null);
        }
        return map;
    }

使用是:

var colors = GetStaticPropertyBag(typeof(Colors));

foreach(KeyValuePair<string, object> colorPair in colors)
{
     Console.WriteLine(colorPair.Key);
     Color color = (Color) colorPair.Value;
}

帮助方法的功劳归于 How can I get the name of a C# static class property using reflection?

答案 1 :(得分:6)

您可以使用Reflection获取Colors类型中的所有属性:

var colorProperties = Colors.GetType().GetProperties(BindingFlags.Static | BindingFlags.Public);
var colors = colorProperties.Select(prop => (Color)prop.GetValue(null, null));
foreach(Color myColor in colors)
{
    // ....

答案 2 :(得分:2)

您可以使用此代码完成此操作。

     List<string> colors = new List<string>();

    foreach (string colorName in Enum.GetNames(typeof(KnownColor)))
    {
        //cast the colorName into a KnownColor
        KnownColor knownColor = (KnownColor)Enum.Parse(typeof(KnownColor), colorName);
        //check if the knownColor variable is a System color
        if (knownColor > KnownColor.Transparent)
        {
            //add it to our list
            colors.Add(colorName);
        }
    }