获取按钮前景色

时间:2014-06-01 20:12:41

标签: c# windows xaml windows-8.1 brush

尝试了许多组合,例如:

        SolidColorBrush b = (SolidColorBrush)myButton.Foreground;
        b.Color.ToString();

它返回: Windows.Ui.Xaml.Media.SolidColorBrush

但我需要知道颜色,例如:白色。

2 个答案:

答案 0 :(得分:1)

您可以创建扩展方法并从Colors类获取颜色名称:

public static class ColorEx
{
    public static string GetColorName(this SolidColorBrush scb)
    {
        string result = null;
        foreach (var pi in typeof(Colors).GetRuntimeProperties())
        {
            Color c = (Color)pi.GetValue(null);
            if (c == scb.Color)
            {
                result = pi.Name;
                break;
            }
        }
        return result;
    }
}

ColorEx类中,您可以使用LINQ使代码更具可读性和更短:

public static class ColorEx
{
    public static string GetColorName(this SolidColorBrush scb)
    {
        return typeof(Colors).GetRuntimeProperties().Where(x => (Color)x.GetValue(null) == scb.Color).Select(x => x.Name).FirstOrDefault();
    }
}

示例:

SolidColorBrush b = (SolidColorBrush)myButton.Foreground;
Debug.WriteLine(b.GetColorName());

答案 1 :(得分:0)

另一种方法:

        SolidColorBrush s = btn.Foreground as SolidColorBrush;
        string name="";
        foreach (KnownColor kc in Enum.GetValues(typeof(KnownColor)))
        {
            System.Drawing.Color known = System.Drawing.Color.FromKnownColor(kc);
            if (System.Drawing.Color.FromArgb(s.Color.A, s.Color.R, s.Color.G, s.Color.B).ToArgb() == known.ToArgb())
            {
                name = known.Name;
            }
        }
        MessageBox.Show(name);

s.Color对象是System.Windows.Media.Color,因此我将其“转换”为System.Drawing.Color,以便使用KnownColor枚举找到它的名称。