TOC

This article has been localized into Korean by the community.

기본 컨트롤:

TextBlock 컨트롤

TextBlock은 컨트롤이 아니라 TextBlock 그 자체입니다. Control 클래스로부터 상속되지 않기 때문입니다. 하지만 WPF 프레임워크에서 다른 컨트롤들과 같은 역할을 합니다. 그래서 우리는 간단하게 컨트롤이라고 부르겠습니다.

TextBlock 컨트롤은 WPF의 가장 기본적인 컨트롤 중 하나이며 매우 유용합니다. Label 컨트롤처럼 스크린에 텍스트를 넣을 수 있습니다. 하지만 간단한 방식으로 적은 리소스를 요구합니다. 일반적으로 Label은 짧은, 1줄 정도의 텍스트에 적합합니다(하지만 이미지를 담을 수도 있습니다). 반면에 TextBlock은 여러 줄의 문자열에서도 매우 잘 작동하며 텍스트(strings)만 담을 수 있습니다. Label과 TextBlock은 각각의 장점이 있으므로 상황에 따라 적합한 방법을 사용합니다.

우리는 이미 "Hello, WPF!" 편에서 TextBlock 컨트롤을 사용 해보았습니다. 지금부터는 TextBlock의 가장 간단한 형태부터 살펴보도록 하겠습니다.

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBlockSample" Height="100" Width="200">
    <Grid>
		<TextBlock>This is a TextBlock</TextBlock>
    </Grid>
</Window>

보이는 것처럼 간단합니다. 만약 튜토리얼의 이전 챕터를 읽어보았다면, 새로운 것은 없었을 것입니다. TextBlock 사이에 텍스트를 넣는 것은 TextBlock의 Text 속성을 정의하는 간단한 방법입니다.

다음의 예제에서는 TextBlock으로 어떻게 장문의 텍스트를 다루는 지 살펴보겠습니다. 조금 더 보기 좋게 약간의 margin 추가해보았습니다 :

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBlockSample" Height="100" Width="200">
    <Grid>
		<TextBlock Margin="10">This is a TextBlock control and it comes with a very long text</TextBlock>
    </Grid>
</Window>

긴 문자열 처리

스크린샷에서 확인할 수 있듯이 TextBlock은 완벽하게 장문의, 여러 줄로 된 텍스트를 처리할 수 있지만 디폴트 상태에서는 불가능합니다. 이 경우에는 텍스트가 너무 길어서 윈도우 안 쪽으로 다 들어오지 않습니다. WPF는 가능한 한 보여줄 수 있는 텍스트만 보여주고 멈춥니다.

다행히도, 이 문제를 다룰 수 있는 몇 가지 방법이 있습니다. 다음의 예제에서 그 모든 방법을 보여드리겠습니다. 그 뒤에 각 방법을 설명하겠습니다 :

<Window x:Class="WpfTutorialSamples.Basic_controls.TextBlockSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="TextBlockSample" Height="200" Width="250">
    <StackPanel>
		<TextBlock Margin="10" Foreground="Red">
			This is a TextBlock control<LineBreak />
			with multiple lines of text.
		</TextBlock>
		<TextBlock Margin="10" TextTrimming="CharacterEllipsis" Foreground="Green">
			This is a TextBlock control with text that may not be rendered completely, which will be indicated with an ellipsis.
		</TextBlock>
		<TextBlock Margin="10" TextWrapping="Wrap" Foreground="Blue">
			This is a TextBlock control with automatically wrapped text, using the TextWrapping property.
		</TextBlock>
	</StackPanel>
</Window>

쉬운 개요로, 다른 색상의 세 가지 TextBlock 컨트롤이 있습니다(Foreground 속성 이용). 각각 다른 방법을 이용하여 텍스트 내용이 길다는 문제를 해결합니다.

빨간 색깔의 텍스트LineBreak를 이용하여 설계의 요구대로 여러줄로 되었다. 이 방법은 일반 컨트럴을 초월하여 한 텍스트를 여러줄로 만들 때 필요한 방법이기는 하나, 많은 경우 유연하게 변하지 않는다. 만일 윈도우의 크기를 늘여도 텍스트의 위치는 변하지 않으며, 심지어 윈도우가 텍스트를 한줄에 쓸 정도로 커져도 그대로 있게 된다.

녹색 TextBlockTextTrimming 속성을 CharacterEllipsis로 지정하여 더 이상 텍스트를 컨트롤에 맞출 수 없는 경우 줄임표 (...)를 표시합니다. 이것은 텍스트를 보여줄만한 충분한 공간이 없는 경우 더 많은 텍스트가 있음을 보여주는 일반적인 방법입니다. 텍스트가 길지만 한 줄 이상을 사용하지 않기를 원하는 경우에 좋습니다. CharacterEllipsis의 대안으로 WordEllipsis를 사용할 수 있습니다. WordEllipsis는 마지막 가능한 문자 대신에 문장의 끝에 있는 단어를 잘라내어 단어가 부분적으로 만 표시되는 것을 방지합니다.

파란색 TextBlockTextWrapping 속성에 Wrap 값을 지정해 텍스트가 이전 행에 더 이상 들어갈 수 없을 때마다 다음 줄로 내려가도록 만듭니다. 텍스트의 줄 바꿈 할 위치를 수동으로 정의하는 첫 번째 LineBreak 예제와는 달리, 이 작업은 완전히 자동으로 수행됩니다. TextBlock의 사용 가능 공간이 더 많거나 적어지면 자동으로 조정됩니다. 예제의 창을 더 크게 또는 작게 만들면 상황에 맞게 줄 바꿈이 어떻게 업데이트되는지 확인할 수 있습니다.

지금까지 TextBlock를 이용해 간단한 문자열을 처리했습니다. 다음 챕터에서는 TextBlock의 진화된 기능성을 살펴볼 것 입니다. TextBlock을 이용해 다양한 스타일의 텍스트를 생성하거나 그 이상의 것들을 할 수 있습니다.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!