我有一个用户控件,我将一个字符串绑定到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,以及名称的开关?这似乎不是最聪明的解决方案
解决方法
我在网上看到的一个聪明的方法是通过创建一个表示< 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’s Tech Blog – ColorFromString for Silverlight or .NET