You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 13:04:08