---------------------------------------------------------------------------
namespace Hugeflow.Extension.Converter
{
public
static class StringConvertExtension {
public static SolidColorBrush ToSolidColorBrush(this string s)
{
Color color = Colors.Black;
Regex reg = new Regex("#([0-9A-Fa-f]{2}){3,4}");
if (reg.Match(s).Success)
{
if (s.Length == 7)
color = Color.FromArgb(0xFF, Convert.ToByte(s.Substring(1, 2), 0x10), Convert.ToByte(s.Substring(3, 2), 0x10), Convert.ToByte(s.Substring(5, 2), 0x10));
else if (s.Length == 9)
color = Color.FromArgb(Convert.ToByte(s.Substring(1, 2), 0x10), Convert.ToByte(s.Substring(3, 2), 0x10), Convert.ToByte(s.Substring(5, 2), 0x10), Convert.ToByte(s.Substring(7, 2), 0x10));
}
else
{
var prop = from p in typeof(Colors).GetProperties(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Static | BindingFlags.GetProperty)
where p.Name.Equals(s, StringComparison.OrdinalIgnoreCase)
select p;
color = (Color)typeof(Colors).InvokeMember(prop.First().Name, BindingFlags.Static | BindingFlags.Public | BindingFlags.GetProperty, null, null, new Object[] { });
}
return new SolidColorBrush(color);
}
}
}---------------------------------------------------------------------------
위의 코드를 새 클래스로 만들어 넣고,
사용할 때에는 다음과 같이 Converter의 네임스페이스를 using으로 선언해 주면 자동으로 모든 문자열에 ToSolidColorBrush라는 이름의 확장 메서드가 보이죠.
---------------------------------------------------------------------------
using Hugeflow.Extension.Converter;
//... 생략...
Brush brush1 = "#FFFF9966".ToSolidColorBrush();
Brush brush2 = "Yellow".ToSolidColorBrush();
---------------------------------------------------------------------------
코드에 대해 간단하게 설명하자면, 정규식Regular Expressions으로 문자열 형식을 검사하고, 리플렉션Reflection 및 LINQ를 사용하여 실제로 실버라이트에서 사용 가능한 컬러 문자열 형식인지를 검사하여 자동으로 생성하도록 했어요. 뭐, 간단한 코드니까 눈으로 읽어보면 될거에요.
