Самый простой способ преобразовать Цвет как строку как #XXXXXX в System.Windows.Media.Brush - PullRequest
12 голосов
/ 07 февраля 2012

Я думаю, что название ясно!

Теперь у меня есть:

System.Drawing.Color uiui = System.Drawing.ColorTranslator.FromHtml(myString);
var intColor = (uint)((uiui.A << 24) | (uiui.R << 16) | (uiui.G << 8) | (uiui.B << 0));
var bytes = BitConverter.GetBytes(uint.Parse(value));
var brush = new SolidColorBrush();
brush.Color = Color.FromArgb(bytes[3], bytes[2], bytes[1], bytes[0]);

1 - myString похожа на #FFFFFF, как я сказал в заголовке

2- Это не работает в строке BitConverter.GetBytes, что удивляет меня, потому что я получил представление int на своем Color!

3- В любом случае, я знаю, что преобразование COlor не так интуитивно понятно, но я чувствую, что яне делает это правильно ... Это хороший способ?

Ответы [ 3 ]

33 голосов
/ 07 февраля 2012

Вы можете использовать System.Windows.Media.ColorConverter

var color = (Color)ColorConverter.ConvertFromString("#FF010203");
//OR
var color = (Color)ColorConverter.ConvertFromString("#010203");
//OR
var color = (Color)ColorConverter.ConvertFromString("Red");

//and then:
var brush = new SolidColorBrush(color);  

Это довольно гибкий подход в отношении того, что он принимает.Взгляните на примеры в XAML здесь .Вы можете передать любой из этих строковых форматов в.

Примечание. Все они в System.Windows.Media (для WPF), их не следует путать с System.Drawing (для WinForms)

2 голосов
/ 07 февраля 2012

Это вспомогательный класс, который я использовал в прошлом

    public static Color HexStringToColor(string hexColor)
    {
        string hc = ExtractHexDigits(hexColor);
        if (hc.Length != 6)
        {
            // you can choose whether to throw an exception
            //throw new ArgumentException("hexColor is not exactly 6 digits.");
            return Color.Empty;
        }
        string r = hc.Substring(0, 2);
        string g = hc.Substring(2, 2);
        string b = hc.Substring(4, 2);
        Color color = Color.Empty;
        try
        {
            int ri = Int32.Parse(r, NumberStyles.HexNumber);
            int gi = Int32.Parse(g, NumberStyles.HexNumber);
            int bi = Int32.Parse(b, NumberStyles.HexNumber);
            color = Color.FromArgb(ri, gi, bi);
        }
        catch
        {
            // you can choose whether to throw an exception
            //throw new ArgumentException("Conversion failed.");
            return Color.Empty;
        }
        return color;
    }

и дополнительный вспомогательный класс

        public static string ExtractHexDigits(string input)
        {
            // remove any characters that are not digits (like #)
            var isHexDigit
                = new Regex("[abcdefABCDEF\\d]+", RegexOptions.Compiled);
            string newnum = "";
            foreach (char c in input)
            {
                if (isHexDigit.IsMatch(c.ToString()))
                {
                    newnum += c.ToString();
                }
            }
            return newnum;
        }
0 голосов
/ 12 октября 2017

Просто используйте метод ColorTranslator:

ColorTranslator.FromHtml("#010203");
...