我有一个用户控件,其中我将一个字符串绑定到 xaml 路径。这使我可以选择“黑色”“蓝色”等颜色,也可以使用十六进制数字作为字符串来选择颜色。
但我无法在 C# 代码中使用相同的字符串。如下例所示:
SolidColorBrush blackBrush = new SolidColorBrush();
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = shieldGearModelRec.Gear.Color;
所以最后一个字符串shieldGearModelRec.Gear.Color
是我在 XAML 中用作绑定的内容。它可以将字符串转换为颜色名称或十六进制描述中的颜色。但是我怎样才能在 C# 后面的代码中做到这一点呢?
我的搜索发现了类似的东西在 C# 中将字符串转换为颜色 https://stackoverflow.com/questions/3391462/convert-string-to-color-in-c-sharp但这在 Windows Phone 中是不可能的。有办法实现这个吗?
An Idea
我是否需要创建一个转换器来读取字符串,查找 # 以确定它是十六进制还是颜色名称,然后使用六进制转换器查找 rgb 以及名称开关?这似乎不是最聪明的解决方案
我在网上看到的一种实现此目的的巧妙方法是创建一个表示 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;
}
使用示例:
Color newColor = new Color();
StringToColor(shieldGearModelRec.Gear.Color,out newColor);
mySolidColorBrush.Color = newColor;
注:来源StringToColor()
方法可以在 George 对此博文的评论中找到:Jim McCurdy 的技术博客 - 用于 Silverlight 或 .NET 的 ColorFromString http://yinyangme.com/blog/post/ColorFromString-for-Silverlight-or-NET.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)