字串轉換成顏色,這個在WPF中可以一句話搞定的事情:
var color = (Color)ColorConverter.ConvertFromString("#FF293C69");
但是在WinRT中沒有相應的方法支援,唯一一個初始化Color的方法就是Windows.UI.ColorHelper類型的FromArgs方法,參數是4個byte。
因此寫了個方法,把顏色字串直接轉換成SolidColorBrush。該方法可以解析的字串對#和Alpha值得存在沒有要求。也就是說以下值都可以被正確解析(沒帶Alpha當然預設Alpha為FF):
#FF293C69 #293C69 FF293C69 293C69
代碼:
//+ using System.Globalization;
//+ using Windows.UI;
SolidColorBrush GetSolidColorBrush(string color)
{
if (color == null)
throw new ArgumentNullException("color");
try
{
//去掉#
if (color.StartsWith("#"))
color = color.Substring(1);
//將字串解析成完整的int
byte a, r, g, b;
int integer = Int32.Parse(color, NumberStyles.HexNumber);
//判斷或解析Alpha
if (color.Length == 6)
a = 255;
else
a = (byte)((integer >> 24) & 255);
//解析RGB
r = (byte)((integer >> 16) & 255);
g = (byte)((integer >> 8) & 255);
b = (byte)(integer & 255);
return new SolidColorBrush(ColorHelper.FromArgb(a, r, g, b));
}
catch (Exception ex)
{
throw new FormatException("無法解析的顏色", ex);
}
}