다음을 통해 공유


방법: 윤곽선이 있는 텍스트 만들기

업데이트: 2007년 11월

대부분의 경우 WPF(Windows Presentation Foundation) 응용 프로그램의 텍스트 문자열에 장식을 추가할 때 개별 문자나 문자 모양의 컬렉션과 관련된 텍스트를 사용하게 됩니다. 예를 들어 선형 그라데이션 브러시를 만들어 TextBox 개체의 Foreground 속성에 적용할 수 있습니다. 텍스트 상자를 표시하거나 편집할 때 선형 그라데이션 브러시가 텍스트 문자열의 현재 문자 집합에 자동으로 적용됩니다.

텍스트 상자에 적용된 선형 그라데이션 브러시의 예

선형 그라데이션 브러시로 표시된 텍스트

하지만 텍스트를 Geometry 개체로 변환하여 다른 형식의 시각적 서식이 있는 텍스트를 만들 수도 있습니다. 예를 들어 텍스트 문자열의 윤곽선을 사용하여 Geometry 개체를 만들 수 있습니다.

텍스트의 윤곽선 기하 도형에 적용된 선형 그라데이션 브러시의 예

선형 그라데이션 브러시를 사용하여 표시한 텍스트 윤곽선

Geometry 개체로 변환된 텍스트는 더 이상 문자 컬렉션이 아니므로 텍스트 문자열의 문자를 수정할 수 없습니다. 그러나 스트로크 및 채우기 속성을 수정하여 변환된 텍스트의 모양을 변경할 수 있습니다. 스트로크는 변환된 텍스트의 윤곽선을 참조하고 채우기는 변환된 텍스트의 윤곽선 내의 영역을 참조합니다.

다음 예제에서는 변환된 텍스트의 스트로크 및 채우기를 수정하여 시각 효과를 만드는 여러 가지 방법을 보여 줍니다.

다른 색으로 스트로크와 채우기를 설정하는 예

채우기와 스트로크에 다른 색을 사용하는 텍스트

스트로크에 이미지 브러시가 적용된 예

스트로크에 이미지 브러시가 적용된 텍스트

또한 변환된 텍스트의 경계 상자 사각형이나 강조 표시를 수정할 수 있습니다. 다음 예제에서는 변환된 텍스트의 스트로크 및 강조 표시를 수정하여 시각 효과를 만드는 방법을 보여 줍니다.

스트로크 및 강조 표시에 이미지 브러시가 적용된 예

스트로크에 이미지 브러시가 적용된 텍스트

참고

다음 코드 예제를 추출한 전체 코드 샘플을 보려면 윤곽선이 있는 텍스트 사용자 지정 컨트롤 샘플을 참조하십시오.

예제

텍스트를 Geometry 개체로 변환할 때 가장 중요한 것은 FormattedText 개체를 사용하는 것입니다. 이 개체를 만들었으면 BuildGeometryBuildHighlightGeometry 메서드를 사용하여 텍스트를 Geometry 개체로 변환할 수 있습니다. 첫 번째 메서드는 서식 있는 텍스트의 기하 도형을 반환하고 두 번째 메서드는 서식 있는 텍스트 경계 상자의 기하 도형을 반환합니다. 다음 코드 예제에서는 FormattedText 개체를 만들고 서식 있는 텍스트와 해당 경계 상자의 기하 도형을 검색하는 방법을 보여 줍니다.

/// <summary>
/// Create the outline geometry based on the formatted text.
/// </summary>
public void CreateText()
{
    System.Windows.FontStyle fontStyle = FontStyles.Normal;
    FontWeight fontWeight = FontWeights.Medium;

    if (Bold == true) fontWeight = FontWeights.Bold;
    if (Italic == true) fontStyle = FontStyles.Italic;

    // Create the formatted text based on the properties set.
    FormattedText formattedText = new FormattedText(
        Text,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface(
            Font,
            fontStyle,
            fontWeight,
            FontStretches.Normal),
        FontSize,
        System.Windows.Media.Brushes.Black // This brush does not matter since we use the geometry of the text. 
        );

    // Build the geometry object that represents the text.
    _textGeometry = formattedText.BuildGeometry(new System.Windows.Point(0, 0));

    // Build the geometry object that represents the text hightlight.
    if (Highlight == true)
    {
        _textHighLightGeometry = formattedText.BuildHighlightGeometry(new System.Windows.Point(0, 0));
    }
}

검색된 Geometry 개체를 표시하려면 변환된 텍스트를 표시하는 개체의 DrawingContext에 액세스해야 합니다. 이 코드 예제에서의 작업은 사용자 정의 렌더링을 지원하는 클래스에서 파생된 사용자 지정 컨트롤 개체를 만들어서 수행됩니다. 사용자 지정 컨트롤을 만드는 방법에 대한 자세한 내용은 윤곽선이 있는 텍스트 사용자 지정 컨트롤 샘플을 참조하십시오.

사용자 지정 컨트롤에서 Geometry 개체를 표시하려면 OnRender 메서드에 대한 재정의를 제공합니다. 재정의된 메서드는 DrawGeometry 메서드를 사용하여 Geometry 개체를 그려야 합니다.

/// <summary>
/// OnRender override draws the geometry of the text and optional highlight.
/// </summary>
/// <param name="drawingContext">Drawing context of the OutlineText control.</param>
protected override void OnRender(DrawingContext drawingContext)
{
    // Draw the outline based on the properties that are set.
    drawingContext.DrawGeometry(Fill, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textGeometry);

    // Draw the text highlight based on the properties that are set.
    if (Highlight == true)
    {
        drawingContext.DrawGeometry(null, new System.Windows.Media.Pen(Stroke, StrokeThickness), _textHighLightGeometry);
    }
}

참고 항목

작업

윤곽선이 있는 텍스트 사용자 지정 컨트롤 샘플

개념

서식 있는 텍스트 그리기