ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# WPF Font 폰트 클래스 사용(직렬화, Label에 적용)
    C#/WPF 2016. 12. 29. 14:29

    공부하다 보니 WPF에서는 WinForms의 FontDialog에서 입력받은 폰트를 Label에 적용시키기가 번거로웠다. 또한 FontFamily 와 FontWeight등 폰트와 관련된 것들은 json으로 직렬화가 되지 않고, 몇몇은 직렬화가 되어도 정확한 내용이 저장되지 않았다. 그래서 직접 사용하기 위해 클래스를 만들었다.


    WindowFontClass.cs

    (2017.01.16 수정)


    WPF에는 Font 클래스가 따로 존재하지 않는다. FontFamily와 FontWeight, FontSize, FontStyle, FontStretch 가 존재하는데, 이들은 각각 서체, 굵기, 크기, 스타일, 늘어나는 정도를 뜻한다. Label은 이들이 각각 따로 설정되어 있어서 한번에 적용시키는 것이 불가능한데, 이를 간편히 하기 위해 ApplyToLabel 함수를 만들었다. 추후에 다른 컨트롤들에 적용시키는 함수도 만들것이다.


    FontFamily는 string을 통해 생성할 수 있고, source 속성을 통해 string 형으로 다시 반환할 수 있다.

    FontWeight는 FromOpenTypeWeight 라는 함수를 통해 int 형으로 생성할 수 있고, ToOpenTypeWeight 라는 함수를 통해 int 형을 FontWeight로 반환할 수 있다. (msdn)

    FontSize는 double 형으로 바로바로 수정할 수 있다. float 형으로 대입시킬 때에는 형변환자를 사용하여야 하며, 이 때 오차가 발생할 수 있다. 하지만 FontSize를 수정하는 선에서는 발생하지 않을 것이다.

    FontStyle은 내부적으로는 int 형으로 처리하지만 외부에서는 접근이 불가능 하다.
     그래서 
    임의적으로 normal, oblique, italic 세 가지를 0, 1, 2로 배정하여 내부적으로 처리하며, 이 외에 다른 숫자가 입력될 시에는 모두 normal로 처리하도록 하였다. (msdn)

    FontStretch는 사용해본적이 없지만, FontWeight와 마찬가지로 FromOpenTypeStretch 라는 함수와 ToOpenTypeStretch라는 함수를 제공해 주어서 이를 통해 int 형을 생성, 반환하였다. (msdn)


    위 다섯가지중 FontFamily는 json 직렬화가 되지 않으며, 이와 double 형을 제외한 세 가지는 직렬화를 하여도 내용이 없이, { } 이와 같이 직렬화가 된다. 그래서 내부적으로는 string형과 int형으로 직렬화를 시킨다.


    추후에 추가 예정


    2017.01.12
    폰트에 그림자 효과 적용 가능하게 추가.

    2017.01.16

    dynamic 타입을 통해 한 함수에서 Label, TextBox, TextBlock 에 폰트를 적용 가능할 수 있게 함




    (아래는 초기 코드)












    댓글

GiGong