การสร้าง SolidColorBrush จากค่าสีฐานสิบหก


129

ฉันต้องการสร้าง SolidColorBrush จากค่า Hex เช่น #ffaacc ฉันจะทำเช่นนี้ได้อย่างไร?

ใน MSDN ฉันได้รับ:

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

ดังนั้นฉันจึงเขียน (พิจารณาว่าวิธีของฉันได้รับสีเป็น#ffaacc):

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

แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดเป็น

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

3 ข้อผิดพลาดเช่น: Cannot convert int to byte.

แต่ตัวอย่าง MSDN ทำงานอย่างไร?


6
โง่มากที่ไม่อนุญาตรูปแบบ #FFFFFF เริ่มต้น
MrFox

1
ไม่มีงานเหล่านี้สำหรับ UWP
kayleeFrye_onDeck

คำตอบ:



17

วิธีรับสีจากรหัสสีฐานสิบหกโดยใช้. NET

ฉันคิดว่านี่คือสิ่งที่คุณเป็นหวังว่ามันจะตอบคำถามของคุณ

ในการรับโค้ดของคุณให้ใช้งาน Convert ToByte แทน 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

หากคุณไม่ต้องการจัดการกับความเจ็บปวดของการแปลงทุกครั้งเพียงแค่สร้างวิธีการขยาย

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

จากนั้นใช้ดังนี้: BackColor = "#FFADD8E6".ToBrush()

อีกวิธีหนึ่งหากคุณสามารถระบุวิธีการทำสิ่งเดียวกันได้

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

BackColor = BrushFromHex("#FFADD8E6");

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.