在UWP中使用C#处理十六进制颜色码的相关问题及替代ColorConverter的实现方案
在UWP中使用C#处理十六进制颜色码的相关问题及替代ColorConverter的实现方案
嗨,我完全懂你的困扰——在UWP项目里没法用ColorConverter,想直接用十六进制颜色值(比如#ffeeee)来设置控件前景色对吧?别担心,给你分享两个靠谱的替代方案,亲测好用:
方案一:手动编写十六进制转Color的辅助方法
这个方法不需要依赖任何额外类库,自己解析十六进制字符串就能生成Color对象,还能兼容多种格式的十六进制颜色(比如3位、4位、6位、8位的写法)。
先写一个通用的转换方法:
public static Color HexToColor(string hexColor) { // 先移除字符串开头的#号 string cleanHex = hexColor.TrimStart('#'); byte alpha = 255; // 默认完全不透明 byte red = 0; byte green = 0; byte blue = 0; switch (cleanHex.Length) { // 处理#RGB格式,比如#f0f -> #ff00ff case 3: red = Convert.ToByte(cleanHex[0].ToString() + cleanHex[0], 16); green = Convert.ToByte(cleanHex[1].ToString() + cleanHex[1], 16); blue = Convert.ToByte(cleanHex[2].ToString() + cleanHex[2], 16); break; // 处理#ARGB格式,比如#8f0f -> #88ff00ff case 4: alpha = Convert.ToByte(cleanHex[0].ToString() + cleanHex[0], 16); red = Convert.ToByte(cleanHex[1].ToString() + cleanHex[1], 16); green = Convert.ToByte(cleanHex[2].ToString() + cleanHex[2], 16); blue = Convert.ToByte(cleanHex[3].ToString() + cleanHex[3], 16); break; // 处理#RRGGBB格式,比如#ffaacc case 6: red = Convert.ToByte(cleanHex.Substring(0, 2), 16); green = Convert.ToByte(cleanHex.Substring(2, 2), 16); blue = Convert.ToByte(cleanHex.Substring(4, 2), 16); break; // 处理#AARRGGBB格式,比如#ffffaacc case 8: alpha = Convert.ToByte(cleanHex.Substring(0, 2), 16); red = Convert.ToByte(cleanHex.Substring(2, 2), 16); green = Convert.ToByte(cleanHex.Substring(4, 2), 16); blue = Convert.ToByte(cleanHex.Substring(6, 2), 16); break; default: throw new ArgumentException("传入的十六进制颜色格式无效,请检查输入字符串"); } return Color.FromArgb(alpha, red, green, blue); }
使用的时候就很简单啦,直接调用方法生成颜色:
// 替换你原来的ColorConverter写法 abc.Foreground = new SolidColorBrush(HexToColor("#ffaacc")); // 甚至你原来用颜色名的地方也能换成十六进制,比如Colors.Green对应#FF008000 if (t == 2) { x.Foreground = new SolidColorBrush(HexToColor("#FF008000")); }
方案二:使用WinUI的ColorHelper类(适用于Windows App SDK/WinUI 3项目)
如果你的项目是基于Windows App SDK或者已经引用了WinUI 3,那可以直接用ColorHelper.FromHex()方法,省得自己写解析逻辑:
首先确保你引用了命名空间:
using Microsoft.UI.Xaml.Media;
然后直接调用:
Color targetColor = ColorHelper.FromHex("#ffaacc"); abc.Foreground = new SolidColorBrush(targetColor);
这个方法会自动处理各种合法的十六进制颜色格式,非常省心。
备注:内容来源于stack exchange,提问作者alisa
相关产品推荐
相关产品推荐

