Avalonia颜色字符串和颜色对象转换
010 Avalonia 颜色字符串和颜色对象转换
1. 前言
之前写 WPF 的时候,颜色转换如字符串#66CCFF 转为对应的颜色我真的写了一个轮子,后面才发现 WPF 里面就有这样的方法,直到现在我仍然对之前项目中这个多余的轮子而耿耿于怀,为此在研究 Avalonia 的这个过程中,我希望先来看一下 Avalonia 本身的字符串转颜色和颜色转字符串的手段。
2. 从字符串创建 Brush
你可以通过这种方式创建Brush,但是它没有 TryParse,为此,一个非法的输入会导致出现异常,异常就像这个样子:System.FormatException:“Invalid brush string: 'aqua11'.”。
2.1 颜色名称转 Brush
var brush = Brush.Parse("aqua");
2.2 Hex 转 Brush
var brush = Brush.Parse("#66CCFF");
评价:推荐度一般,因为没有 TryParse,如果解析异常,就会整个报错,也不会因为错误而返回空,这种设计也挺好的,只是在一些颜色取值的一些 UI 交互时,如果每次都要用 TryCatch 包起来调用,但是还是有些性能焦虑(虽然也损失不到哪里去就是了),可以一试但是我可能会选择别的方式实现。
3. 从字符串创建 Color
Color 转 Brush 的写法相信大家都知道,但是我们还是写一下:
var color = Color.FromRgb(255, 255, 0);
var brush = new SolidColorBrush(color);
和 Brush 是差不多的,但是多了 TryParse,会更加科学一些。
先来看看非常自信的 Parse 写法:
3.1 颜色名称转 Color
var color = Color.Parse("aqua");
3.2 Hex 转 Color
var color = Color.Parse("#66ccff");
然后再来看一下 TryParse 的做法
3.3 颜色名称转 Color TryParse
if(Color.TryParse("aqua", out var color))
{
// TODO 转换成功
}
else
{
// TODO 转换失败
}
3.4 Hex 转 Color TryParse
if(Color.TryParse("#66ccff", out var color))
{
// TODO 转换成功
}
else
{
// TODO 转换失败
}
4. Color 转 Hex 字符串
我们既然能够从 Hex 转为颜色,有的时候希望能从 RGB 颜色用 Hex 字符串,这又该怎么办呢。
var color = Colors.Red;
var hex = ColorToHexConverter.ToHexString(color, AlphaComponentPosition.Leading);
Debug.WriteLine(hex);
结果如下:
FFFF0000
如果所见这种参数下,你可以发现没有 # 符号前导,而且你可能不在意最开始的 Alpha 值,希望能够将它去掉,这些的做法可以通过参数的调整实现:
var color = Colors.Red;
var hex = ColorToHexConverter.ToHexString(color, AlphaComponentPosition.Leading, false, true);
Debug.WriteLine(hex);
上文的结果是这个:
#FF0000
这会不会更符合你的期待?

浙公网安备 33010602011771号