1 Results for 'regular expressions'

  1. 2008.05.17 [TIP] XAML에서 사용하는 색상 표현 문자열을 Brush로 반환 (1)
전에 네이버 실버라이트 카페에 패러다임님이 올려주신 코드가 있었는데 약간 더 정리해서 #FFFFFFFF 형식과 "Black", "Yellow"같은 표현도 받을 수 있는 확장 메서드 코드를 만들어 봤어요.

---------------------------------------------------------------------------

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를 사용하여 실제로 실버라이트에서 사용 가능한 컬러 문자열 형식인지를 검사하여 자동으로 생성하도록 했어요. 뭐, 간단한 코드니까 눈으로 읽어보면 될거에요.

신고
Posted by gongdo


티스토리 툴바