当前位置:  开发笔记 > 开发工具 > 正文

如何将像"Red"这样的字符串转换为System.Windows.Media.Color?

如何解决《如何将像"Red"这样的字符串转换为System.Windows.Media.Color?》经验,为你挑选了3个好方法。

我知道我可以走很长的路了......

    添加对System.Drawing的引用

    从字符串创建System.Drawing.Color

    从System.Drawing.Color的ARGB值创建System.Windows.Media.Color.

但这感觉就像严重的矫枉过正.

有没有更简单的方法?



1> Kent Boogaar..:
var color = (Color)ColorConverter.ConvertFromString("Red");



2> Jon Skeet..:

新的更好的答案

当然,ColorConverter是要走的路.调用ColorConverter.ConvertFromString并转换结果.不可否认,这将涉及拳击.如果你想避免装箱,建立一个字典,最开始使用标准名称(仍然使用ColorConverter),然后使用字典进行后续查找.

原始答案

您可以相当轻松地将System.Windows.Media.Colors中的属性名称和值一次提取到地图中:

private static readonly Dictionary KnownColors = FetchColors();

public static Color FromName(string name)
{
    return KnownColors[name];
}

private static Dictionary FetchColors()
{
    // This could be simplified with LINQ.
    Dictionary ret = new Dictionary();
    foreach (PropertyInfo property in typeof(Colors).GetProperties())
    {
        ret[property.Name] = (Color) property.GetValue(null);
    }
    return ret;
}

这有点难看,但这是一次性打击.



3> 小智..:

System.Windows.Media.ColorConverter是XamlReader的工作方式.

var result = ColorConverter.ConvertFromString("Red") as Color;

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有