如何将字符串转换为颜色?对于 Windows 手机 C#

JTI*_*TIM 5 c# string xaml colors windows-phone-8

我有一个用户控件,我将一个字符串绑定到 xaml 路径。这使我可以选择“黑色”“蓝色”等颜色,并使用十六进制数字作为字符串来选择颜色。

但我无法在 C# 代码中使用相同的字符串。如下例所示:

SolidColorBrush blackBrush = new SolidColorBrush();
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = shieldGearModelRec.Gear.Color;
Run Code Online (Sandbox Code Playgroud)

所以最后一个字符串shieldGearModelRec.Gear.Color是我在 XAML 中用作绑定的字符串。它可以将字符串转换为颜色名称或六进制描述中的颜色。但是我怎么能在后面的代码中做到这一点,也就是在 c# 中?

我的搜索在 C# 中找到了诸如将字符串转换为颜色之类的东西 但这在 Windows 手机中是不可能的。有没有办法做到这一点?

一个主意

我是否需要创建一个转换器来读取字符串,查找 # 以确定它是六边形还是颜色名称,然后使用六边形转换器来查找 rgb,以及名称的开关?这似乎不是最聪明的解决方案

har*_*r07 3

我在网上看到的一种实现此目的的巧妙方法是创建一个表示 XAML 标记的字符串,然后<Color>用于XamlReader将 XAML 字符串转换为实际Color对象:

private static bool StringToColor(string strColor, out Color color)
{
    string xaml = string.Format("<Color xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">{0}</Color>", strColor);
    try
    {
        object obj = XamlReader.Load(xaml);
        if (obj != null && obj is Color)
        {
            color = (Color)obj;
            return true;
        }
    }
    catch (Exception)
    {
        //Swallow useless exception
    }
    color = new Color();
    return false;
}
Run Code Online (Sandbox Code Playgroud)

使用示例:

Color newColor = new Color(); 
StringToColor(shieldGearModelRec.Gear.Color,out newColor); 
mySolidColorBrush.Color = newColor;
Run Code Online (Sandbox Code Playgroud)

注意:方法来源StringToColor()可以在 George 对此博客文章的评论中找到:Jim McCurdy 的技术博客 - ColorFromString for Silverlight 或 .NET