전에 네이버 실버라이트 카페에 패러다임님이 올려주신 코드가 있었는데 약간 더 정리해서 #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

웬일로 WPF 포스팅을 하나 싶죠?
사실은 어제 은둔고수 꿍님의 제보로 실버라이트의 TextBlock에 한글 폰트를 설정하여 한글을 표시할 수 있는 방법을 전수받아 왔어요!

그래서 시스템에 폰트가 뭐뭐 설치되어 있는지 좀 알아보려고 내친김에 WPF로 시스템의 폰트 폴더에 있는 모든 폰트패밀리의 경로와 이름을 열거하는 간단한 애플리케이션을 만들어봤어요.



아주 간단한 샘플이지만 LINQ를 활용한 필터도 있어요. 그래봤자 전체적인 코드가 그닥 좋지는 않지만요^^;

관심 있으신 분은 샘플 코드와 실행 파일을 아래에서 다운받아서 해보세요.

FontEnumerator.exe

실행 파일

그리고 곧바로 실버라이트에서 한글을 표시하는 위대한 코드가 나갑니다! 기대하시라!
신고
Posted by gongdo
TAG font, LINQ, WPF


티스토리 툴바