如何将字符串转换为Color?适用于windows phone c#

本文关键字:适用于 windows phone Color 字符串 转换 | 更新日期: 2023-09-27 18:21:43

我有一个用户控件,其中我将字符串绑定到xaml路径。这使我可以选择像"黑色"蓝色"这样的颜色,也可以使用六进制数字作为字符串来选择颜色。

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

SolidColorBrush blackBrush = new SolidColorBrush();
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = shieldGearModelRec.Gear.Color;

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

我的搜索结果如下在C#中将字符串转换为Color,但这在windows phone中是不可能的。有没有办法做到这一点?

想法

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

如何将字符串转换为Color?适用于windows phone c#

我在网上看到的实现这一点的一个聪明方法是创建一个表示<Color>的XAML标记的字符串,然后使用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;
}

用法示例:

Color newColor = new Color(); 
StringToColor(shieldGearModelRec.Gear.Color,out newColor); 
mySolidColorBrush.Color = newColor;

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