2014-05-08 34 views
0

我有這樣的RGB顏色#dc020d
我有一個文本塊,我想使文本塊的前景等於我作爲一個字符串的RGB顏色。改變文本塊前景

我試圖

var bc = new BrushConverter(); 

tb.Foreground = (Brush)bc.ConvertFrom("#FFXXXXXX"); 

,但它沒有工作,雖然我使用System.Windows.Media

我發現Color.FromArgb()的唯一方法,但它需要四個字節,我無法將字符串轉換爲四個字節。

+0

使用http://www.yellowpipe.com/yis/tools/hex-to-rgb/color-converter.php – ray

+0

看到樣品http://msdn.microsoft得到十六進制值的RBG .com/en-us/library/system.windows.media.color.fromargb(v = vs.110).aspx – ray

+0

@ray我想在c# –

回答

7

創建一個採用十六進制顏色字符串並返回SolidColorBrush的方法。

像:

public SolidColorBrush GetBrushFromHexColor(string hexColor) 
{ 
    return new SolidColorBrush(
     Color.FromArgb(
      Convert.ToByte(hexColor.Substring(1, 2), 16), 
      Convert.ToByte(hexColor.Substring(3, 2), 16), 
      Convert.ToByte(hexColor.Substring(5, 2), 16), 
      Convert.ToByte(hexColor.Substring(7, 2), 16) 
     ) 
    ); 
} 

而調用這個函數到您設定的顏色文本塊就行了。

MyTxt.Foreground = GetBrushFromHexColor("#ffdc020d"); 
0

您可以使用:

// the same with #94b301 
Color myColor = Color.FromArgb(255, 0x94, 0xb3, 0x01); 
+0

中做到這一點,但我不希望我想這樣做手動 –

0

試試這個。

// Description : Extension methods for using applying solid color in WinRT XAML projects. 
// Owner : Farhan Ghumra 
// Contact : https://www.facebook.com/farhan.ghumra 
//   https://twitter.com/_F4RH4N_ 
// Example : 
// MyRectagle.Fill = ColorExtensions.FromName("SkyBlue"); 
// MyTextBlock.Foreground = ColorExtensions.FromHex("#379988"); 

using Windows.UI; 
using Windows.UI.Xaml.Media; 
using System.Reflection; 

namespace App1 
{ 
    public static class ColorExtensions 
    { 
     /// <summary> 
     /// It gives solid color brush from hexadecimal color code. 
     /// </summary> 
     /// <param name="HexColor">Color code in hexadecimal format (Example : #123456 or #12345678)</param> 
     /// <returns>New instance of SolidColorBrush accoiding to hexadecimal color.</returns> 
     public static SolidColorBrush FromHex(string HexColor) 
     { 
      byte A, R, G, B; 

      if (HexColor.Length == 7) 
      { 
       A = 255; 
       R = HexColor.Substring(1, 2).ToByte(); 
       G = HexColor.Substring(3, 2).ToByte(); 
       B = HexColor.Substring(5, 2).ToByte(); 
       return new SolidColorBrush(Color.FromArgb(A, R, G, B)); 
      } 

      else if (HexColor.Length == 9) 
      { 
       A = HexColor.Substring(1, 2).ToByte(); 
       R = HexColor.Substring(3, 2).ToByte(); 
       G = HexColor.Substring(5, 2).ToByte(); 
       B = HexColor.Substring(7, 2).ToByte(); 
       return new SolidColorBrush(Color.FromArgb(A, R, G, B)); 
      } 

      else 
      { 
       return new SolidColorBrush(Colors.Transparent); 
      } 
     } 

     /// <summary> 
     /// It gives solid color brush from color name. 
     /// </summary> 
     /// <param name="name">Color name as string.</param> 
     /// <returns>New instance of SolidColorBrush according to color name.</returns> 
     public static SolidColorBrush FromName(string ColorName) 
     { 
      var ColorProperty = typeof(Colors).GetRuntimeProperty(ColorName); 

      if (ColorProperty != null) 
       return new SolidColorBrush((Color)ColorProperty.GetValue(null)); 
      else 
       return new SolidColorBrush(Colors.Transparent); 
     } 

     /// <summary> 
     /// Converts hexadecimal color code channel (Alpha, Red, Blue, Green) to byte type. 
     /// </summary> 
     /// <param name="ColorCodePart">Hexadecimal color code channel (Alpha, Red, Blue, Green)</param> 
     /// <returns>byte value parsed from Hexadecimal color code channel</returns> 
     private static byte ToByte(this string ColorCodePart) 
     { 
      return byte.Parse(ColorCodePart, System.Globalization.NumberStyles.HexNumber); 
     } 
    } 
}