我有一个用户控件,我将一个字符串绑定到xaml路径。这使我可以选择“黑色”“蓝色”等颜色,并使用六角数作为字符串来选择颜色。
但是我无法在C#代码中使用相同的字符串。如下例所示:
SolidColorBrush blackBrush = new SolidColorBrush();
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = shieldGearModelRec.Gear.Color;
所以最后一个字符串shieldGearModelRec.Gear.Color
是我在XAML中用作绑定的。它可以将颜色名称或六角形描述转换为颜色。但是如何在后面的代码中执行此操作,即在c#?
我的搜索结果如下 Convert string to Color in C#但这在Windows手机中无法实现。无论如何要实现这个目标吗?
想法
我是否需要创建一个读取字符串的转换器,查找#以确定它是否为hexa或颜色名称,然后使用hexa转换器查找rgb,以及用于名称的开关?这似乎不是最聪明的解决方案
答案 0 :(得分:3)
我在网上看到的一个聪明的方法就是创建一个表示<Color>
的XAML标记的字符串,然后使用XamlReader
将XAML字符串转换为实际的Color
对象:< / p>
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()
方法的来源可以在乔治对此博客文章的评论中找到:Jim McCurdy's Tech Blog - ColorFromString for Silverlight or .NET