Tworzenie SolidColorBrush z szesnastkowej wartości koloru


129

Chcę utworzyć SolidColorBrush z wartości szesnastkowej, takiej jak #ffaacc. W jaki sposób mogę to zrobić?

Na MSDN otrzymałem:

SolidColorBrush mySolidColorBrush = new SolidColorBrush();
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, 255);

Więc napisałem (biorąc pod uwagę, że moja metoda otrzymuje kolor jako #ffaacc):

Color.FromRgb(
  Convert.ToInt32(color.Substring(1, 2), 16), 
  Convert.ToInt32(color.Substring(3, 2), 16), 
  Convert.ToInt32(color.Substring(5, 2), 16));

Ale to dało błąd jako

The best overloaded method match for 'System.Windows.Media.Color.FromRgb(byte, byte, byte)' has some invalid arguments

Również 3 błędy, takie jak: Cannot convert int to byte.

Ale jak działa przykład MSDN?


6
Tak głupie, że nie pozwalają na domyślny format #FFFFFF.
MrFox,

1
Żadne z tych rozwiązań nie działa w przypadku UWP
kayleeFrye_onDeck

Odpowiedzi:


326

Spróbuj tego zamiast tego:

(SolidColorBrush)(new BrushConverter().ConvertFrom("#ffaacc"));

17

Jak uzyskać kolor z szesnastkowego kodu koloru za pomocą .NET?

Myślę, że właśnie tego szukasz, mam nadzieję, że to odpowiada na twoje pytanie.

Aby kod działał, użyj Convert.ToByte zamiast Convert.ToInt ...

string colour = "#ffaacc";

Color.FromRgb(
Convert.ToByte(colour.Substring(1,2),16),
Convert.ToByte(colour.Substring(3,2),16),
Convert.ToByte(colour.Substring(5,2),16));


9
using System.Windows.Media;

byte R = Convert.ToByte(color.Substring(1, 2), 16);
byte G = Convert.ToByte(color.Substring(3, 2), 16);
byte B = Convert.ToByte(color.Substring(5, 2), 16);
SolidColorBrush scb = new SolidColorBrush(Color.FromRgb(R, G, B));
//applying the brush to the background of the existing Button btn:
btn.Background = scb;

4

Jeśli nie chcesz za każdym razem radzić sobie z bólem konwersji, po prostu utwórz metodę rozszerzenia.

public static class Extensions
{
    public static SolidColorBrush ToBrush(this string HexColorString)
    {
        return (SolidColorBrush)(new BrushConverter().ConvertFrom(HexColorString));
    }    
}

Następnie użyj w ten sposób: BackColor = "#FFADD8E6".ToBrush()

Alternatywnie, jeśli możesz podać metodę, aby zrobić to samo.

public SolidColorBrush BrushFromHex(string hexColorString)
{
    return (SolidColorBrush)(new BrushConverter().ConvertFrom(hexColorString));
}

BackColor = BrushFromHex("#FFADD8E6");

0

Wersja vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.