【问题标题】:How to convert a Windows.UI.Color into a string color name in a Windows Universal app如何在 Windows 通用应用程序中将 Windows.UI.Color 转换为字符串颜色名称
【发布时间】:2014-11-29 01:51:46
【问题描述】:

我正在尝试在我的 Windows 8.1 通用应用程序中将 Windows.UI.Color 转换为简单的字符串颜色名称。

我已经有了 Color 的 ARGB 值(甚至是十六进制代码),我只想要它相关的已知名称(例如,从 #7AFF7A7A 到“salmon”)。由于 System.Drawing 在 WinRT 中不可用,我无法使用 ColorConverter 或 ColorTranslator。

我尝试将 Windows.UI.Color 对象转换为 SolidColorBrush 甚至是 Brush,但它们都没有提供名称转换功能。

最好的方法是什么?

【问题讨论】:

  • 您能详细说明一下吗? ARGB 值有什么问题?
  • 没什么错,只是需要名字。下面的答案是一个很好的解决方案。

标签: c# colors winrt-xaml windows-phone-8.1 win-universal-app


【解决方案1】:

你可以使用ColorHelper.ToDisplayName:

var c = Color.FromArgb(255, 255, 0, 0);
Debug.WriteLine("{0} is {1}", c, ColorHelper.ToDisplayName(c));

结果:

#FFFF0000 is Red

【讨论】:

    【解决方案2】:

    Colors 类包含许多颜色的命名属性。没有固定的反向查找,但您可以使用反射来构建自己的从颜色到颜色名称的映射。

    Dictionary<Color, string> ColorNames = new Dictionary<Color, string>();
    foreach (var color in typeof(Colors).GetRuntimeProperties())
    {
        ColorNames[(Color)color.GetValue(null)] = color.Name;
    }
    

    测试:

    Color c = Colors.AliceBlue;
    Debug.WriteLine("{0} is {1}", c, ColorNames[c]);
    

    结果:

    #FFF0F8FF is AliceBlue
    

    注意重复(例如 Colors.Aqua 和 Colors.Cyan 都映射到 #FF00FFFF)。我的循环会更喜欢第二个。

    根据您的 Color 对象的位置,您可能希望关闭字符串十六进制值而不是 Color 对象本身,如果您真的很聪明,您可以进行最接近的匹配而不是仅精确匹配(实现留作练习给读者:))

    --罗伯

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2017-04-14
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多