-
WPF 윤곽선 텍스트(Outlined Text)C#/WPF 2017. 1. 23. 11:00
WPF에 Text를 관리할 때 Effect에는 Shadow Effect는 있지만 Outline Effect는 없습니다.
그래서 찾아보니 어떤 분이 만드신 사용자 지정 컨트롤이 있었고, (링크)
msdn에서 알려주는 Geometry와 Path를 사용하는 방식이 있었습니다.
사용자 지정 컨트롤은 아래 파일을 받으신 후 프로젝트에 추가하신 뒤 xaml에서 추가해주시고, 사용하시면 됩니다.
TextBlock와 거의 유사하게 사용하실 수 있습니다.(FontSize, TextAlignment, TextWrapping 등)
(namespace를 해당 프로젝트의 namespace로 바꾸신 뒤 아래와 같이 사용하실 수 있습니다.)
12<local:OutlinedTextBlock x:Name="textOutline" Text="Text" FontSize="50pt"StrokeThickness="2" Stroke="Orange" Fill="Yellow"/>cs (혹은 해당 xaml의 Window 태그에 xmlns:OutlinedText="clr-namespace:OutlinedTextBlock" 를 추가해 주신 뒤 아래와 같이 사용하시면 됩니다.)
12<OutlinedTextBlock:OutlinedTextBlock x:Name="textOutline" Text="Text" FontSize="50pt"StrokeThickness="2" Stroke="Orange" Fill="Yellow"/>cs madn에서 알려주는 방식은 Geometry를 사용한 방식인데 제가 Label에 적용가능하게 함수를 만들었습니다.
윤곽선을 적용한 뒤 다시 윤곽선을 해제하시려면 해당 Label의 Content를 따로 저장하신 뒤,
해당 Content로 다시 적용해 주시면 됩니다.
123456789101112131415161718192021222324252627282930void OutlinedTextLabel(Label lbl){FormattedText formattedText = new FormattedText(lbl.Content.ToString(),System.Globalization.CultureInfo.GetCultureInfo("ko-kr"),FlowDirection.LeftToRight,new Typeface(lbl.FontFamily, lbl.FontStyle, lbl.FontWeight, lbl.FontStretch),lbl.FontSize, Brushes.Black);formattedText.TextAlignment = TextAlignment.Center;Geometry geometry = formattedText.BuildGeometry(new Point(0, 0));PathGeometry pathGeometry = geometry.GetFlattenedPathGeometry();Canvas cvs = new Canvas();lbl.Content = cvs;Path pt = new Path();pt.Stroke = Brushes.Red;pt.StrokeThickness = 2;pt.Fill = lbl.Foreground;pt.Stretch = Stretch.Fill;cvs.Children.Add(pt);Canvas.SetTop(pt, (cvs.ActualHeight - formattedText.Extent) / 2);Canvas.SetLeft(pt, (cvs.ActualWidth - formattedText.Width) / 2);pt.Data = pathGeometry;}cs 'C# > WPF' 카테고리의 다른 글
WPF Rolling Animation (슬롯머신 같은 애니메이션) (0) 2017.02.17 WPF 라디오 버튼 enum 바인딩(RadoButton Binding enum) (0) 2017.01.24 WPF 메시지 박스 띄우기(경고창 띄우기) (0) 2017.01.16 WPF 글씨에 그림자 효과 (Shadow Text) (2) 2017.01.13 C# WPF Font 폰트 클래스 사용(직렬화, Label에 적용) (0) 2016.12.29 댓글