Tạo SolidColorBrush từ giá trị màu hex


129

Tôi muốn tạo SolidColorBrush từ giá trị Hex, chẳng hạn như #ffaacc. Tôi có thể làm cái này như thế nào?

Trên MSDN, tôi đã nhận được:

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

Vì vậy, tôi đã viết (xem xét phương pháp của tôi nhận được màu như #ffaacc):

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

Nhưng điều này đã gây ra lỗi như

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

Ngoài ra 3 lỗi như: Cannot convert int to byte.

Nhưng sau đó, ví dụ MSDN hoạt động như thế nào?


6
Thật ngu ngốc khi họ không cho phép định dạng #FFFFFF mặc định.
MrFox

1
Không ai trong số này hoạt động cho UWP
kayleeFrye_onDeck

Câu trả lời:


325

Hãy thử điều này thay thế:

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

17

Làm cách nào để lấy Màu từ mã màu thập lục phân bằng .NET?

Điều này tôi nghĩ là những gì bạn đang theo đuổi, hy vọng nó trả lời câu hỏi của bạn.

Để làm cho mã của bạn hoạt động, hãy sử dụng Convert.ToByte thay vì 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));

15

Tôi đã sử dụng:

new SolidColorBrush((Color)ColorConverter.ConvertFromString("#ffaacc"));

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

Nếu bạn không muốn đối phó với nỗi đau của việc chuyển đổi mỗi lần chỉ cần tạo một phương thức mở rộng.

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

Sau đó sử dụng như thế này: BackColor = "#FFADD8E6".ToBrush()

Thay phiên nếu bạn có thể cung cấp một phương pháp để làm điều tương tự.

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

BackColor = BrushFromHex("#FFADD8E6");

0

phiên bản vb.net

Me.Background = CType(New BrushConverter().ConvertFrom("#ffaacc"), SolidColorBrush)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.