如何将字符串转换为颜色?

4

我需要将字符串转换为颜色,因为颜色以字符串形式动态传递。

错误信息:

无法隐式转换字符串为Xamarin.Form.Color

string BackgroundColor = (string)testData["Views"][index][name][i]["BackgroundColor"];

gridLayout.BackgroundColor = BackgroundColor;//Error

2
该字符串的格式究竟是什么? - DavidG
请查看官方文档:https://developer.xamarin.com/api/type/Xamarin.Forms.Color/#Public_Methods - EvZ
BackgroundColor是一个变量,它从json文件中获取值。 - user8151320
但是变量的内容是什么?这才是重要的。例如,它是像#ffff00这样的HTML样式值,还是像“绿色”这样的颜色名称,甚至是一些其他奇怪的文本。 - DavidG
3个回答

6

我猜你的字符串是你想要应用的颜色的十六进制值。如果是这样,你必须将它解析为一种颜色。 .setBackground 方法和 BackgroundColor 属性接受一种颜色对象。

要解析它,使用包含 FromHex 方法的 Color 类。

Color.FromHex("#FFF");


6
你可以使用Xamarin.Forms.ColorTypeConverter
这个方法:ConvertFrom 来自链接的例子:
var converter = new ColorTypeConverter ();
Assert.True (converter.CanConvertFrom (typeof(string)));
Assert.AreEqual (Color.Blue, converter.ConvertFrom ("Color.Blue"));
Assert.AreEqual (Color.Blue, converter.ConvertFrom ("Blue"));
Assert.AreEqual (Color.Blue, converter.ConvertFrom ("#0000ff"));
Assert.AreEqual (Color.Default, converter.ConvertFrom ("Color.Default"));
Assert.AreEqual (Color.Accent, converter.ConvertFrom ("Accent"));
var hotpink = Color.FromHex ("#FF69B4");
Color.Accent = hotpink;
Assert.AreEqual (Color.Accent, converter.ConvertFrom ("Accent"));

2
这是一个仅包含链接的回答,在此处强烈不建议使用。 - DavidG
2
虽然这回答了问题,但最好复制一些相关的示例/代码到这里,因为链接可能会失效。 - Pac0
@DavidG @Pac0 改进了。 - BWA

0

您可以使用ColorTypeConverter将字符串转换为颜色

var converter = new ColorTypeConverter ();
gridLayout.BackgroundColor = converter.ConvertFrom ("Color.Blue");
gridLayout.BackgroundColor = converter.ConvertFrom ("Blue");
gridLayout.BackgroundColor = converter.ConvertFrom ("#0000ff");

希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接