WPF

[WPF] WPF 기본 컨트롤(1) - TextBlock

귀뚜래미 2022. 9. 7. 14:03
728x90

 

- TextBlock은 여러 줄의 문자열을 입력 가능하며 string만 담을 수 있다.

 

긴 문자열 처리

<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>

결과

- 빨간색 텍스트는 LineBreak를 이용해 설계 요구대로 여러줄로 되어있다. 하지만 윈도우 크기를 늘여도 텍스트 위치는 변하지 않고 더 작게 하더라도 그대로 유지된다.

 

- 초록색 텍스트는 TextTrimming 속성을 CharacterEllipsis로 지정해 더 이상 텍스트를 컨트롤에 맞출 수 없는 경우 줄임표(...)를 표시한다. WordEllipsis로 지정 시 마지막 가능한 문자 대신 문자 끝에 있는 단어를 잘라내어 단어가 부분적으로만 표시되는 것을 방지한다.

 

- 파란색 텍스트는 TextWrapping 속성에 Wrap 값을 지정해 텍스트가 행에 더이상 들어갈 수 없을 때마다 다음 줄로 줄바꿈되도록 만든다. 텍스트블록의 사용 가능 공간이 더 많거나 적어지면 자동으로 조정된다.

 

 

Inline formatting

Bold, Italic, Underline

<TextBlock Margin="10" TextWrapping="Wrap">
	TextBlock with <Bold>bold</Bold>, <Italic>italic</Italic> and <Underline>underlined</Underline> text.
</TextBlock>

- 세 개의 태그는 모두 Span을 상속받은 클래스이며 텍스트에 원하는 효과를 만들기 위해 Span요소의 특정 속성을 설정한다

 

LineBreak

- 줄바꿈 태그로, 텍스트에 줄바꿈을 할 위치에 삽입한다.

 

Hyperlink

- 텍스트에 링크를 포함할 수 있다.

- NavigateUri 속성을 사용해 이동할 URL을 정의할 수 있다.

<TextBlock Margin="10" TextWrapping="Wrap">
	This text has a <Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="https://www.google.com">link</Hyperlink> in it.
</TextBlock>

- 하이퍼링크는 WPF 페이지 사이를 이동하는데에도 사용된다.

- 이 경우 RequestNavigate 이벤트를 특별히 처리할 필요는 없지만 일반 WPF 응용 프로그램에서 외부 URL로 링크를 걸려면 RequestNAvigate와 Process 클래스를 이용해 코딩이 필요하다.

- cs 파일에 RequestNavigate 이벤트에 정의한 핸들러를 등록하고 이벤트 발생 시 핸들러가 호출되고, 브라우저를 띄워 URL을 시작한다.

private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e)
{
	System.Diagnostics.Process.Start(e.Uri.AbsoluteUri);
}

 

Span

- 글꼴 크기, 스타일 및 두께, 배경색 및 글꼴색 등 거의 모든 종류의 렌더링을 직접 설정해서 사용하도록 되어있다.

- Span 요소의 가장 큰 장점은 내부에 다른 인라인 요소를 허용해 텍스트와 스타일의 고급 조합을 쉽게 수행할 수 있다는 것이다

<TextBlock Margin="10" TextWrapping="Wrap">
	This <Span FontWeight="Bold">is</Span> a
	<Span Background="Silver" Foreground="Maroon">TextBlock</Span>
	with <Span TextDecorations="Underline">several</Span>
	<Span FontStyle="Italic">Span</Span> elements,
	<Span Foreground="Blue">
		using a <Bold>variety</Bold> of <Italic>styles</Italic>
	</Span>.
</TextBlock>

 

코드에서의 사용방법

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;

namespace WpfTutorialSamples.Basic_controls
{
	public partial class TextBlockCodeBehindSample : Window
	{
		public TextBlockCodeBehindSample()
		{
			InitializeComponent();
			TextBlock tb = new TextBlock();
			tb.TextWrapping = TextWrapping.Wrap;
			tb.Margin = new Thickness(10);
			tb.Inlines.Add("An example on ");
			tb.Inlines.Add(new Run("the TextBlock control ") { FontWeight = FontWeights.Bold });
			tb.Inlines.Add("using ");
			tb.Inlines.Add(new Run("inline ") { FontStyle = FontStyles.Italic });
			tb.Inlines.Add(new Run("text formatting ") { Foreground = Brushes.Blue });
			tb.Inlines.Add("from ");
			tb.Inlines.Add(new Run("Code-Behind") { TextDecorations = TextDecorations.Underline });
			tb.Inlines.Add(".");
			this.Content = tb;
		}
	}
}

 

728x90