This article has been localized into Korean by the community.
Label 컨트롤
가장 간단한 형식인 레이블 컨트롤은 이와 같은 글에서 사용하는 텍스트 블록과 매우 유사합니다. 레이블은 텍스트 속성 대신 Content 속성을 가진다는 것을 알 수 있습니다. 레이블이 Content 속성을 가진 이유는, 레이블은 단지 텍스트가 아니라 모든 종류의 컨트롤을 직접 호스팅 하기 때문입니다. 여기서 말한 Contetnt는 첫 번째 예제, 가장 간단한 예제에서 볼 수 있듯 문자열일 수 있습니다.
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="100" Width="200">
<Grid>
<Label Content="This is a Label control." />
</Grid>
</Window>
유의해야 할 것은, 초기 설정 상태의 Label은 약간의 패딩을 가진다는 것으로 텍스트를 상단과 좌측으로부터 몇 픽셀 떨어지게 렌더링 합니다. TextBlock 컨트롤의 경우 해당 사항이 아니며, 이때에는 수동으로 지정해야 합니다.
이와 같은 간단한 경우, 예를 들면 Content가 단순히 문자열인 경우, Label은 내부적으로 TextBlock을 만들고 그곳에 문자열을 표시합니다.
Label 컨트롤 vs TextBlock 컨트롤
그럼 왜 라벨을 사용하는 걸까요? 음, Label과 TextBlock 사이에는 몇 가지 중요한 차이점이 있습니다. TextBlock은 텍스트 문자열만 렌더링하는 반면 Label은 다음을 수행할 수 있습니다.
- 테두리 지정
- 다른 컨트롤을 렌더링하기 (예: 이미지)
- ContentTemplate 속성을 통해 템플릿 사용 가능
- 관련 컨트롤들에 포커스를 부여하고 키값으로 접근이 가능
마지막 항목은 Label을 사용하는 주된 이유입니다. 만약 단순히 text를 렌더링 하기 위해서라면 TextBlock을 사용하는 것이 훨씬 가볍고 Label보다 좋은 퍼포먼스를 냅니다.
Label 과 Access keys (mnemonics)
Windows 뿐만 아니라 다른 O/S에서도 마찬가지로, [Alt] 키를 누른 상태에서 특정 컨트롤에 해당하는 문자를 누르면 컨트롤에 접근할 수 있습니다. [Alt] 키를 누르고 있으면 문자가 강조됩니다. TextBlock 컨트롤은 이 기능을 지원하지 않지만, Label을 지원하므로 컨트롤로 사용하기 위해서는 Label을 사용하는 것이 좋습니다. 아래 예제를 살펴봅시다.
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
<TextBox Name="txtName" />
<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
<TextBox Name="txtMail" />
</StackPanel>
</Window>
위 스크린샷은 [Alt] 키를 누른 상태를 보여줍니다. 코드를 실행하고, [Alt] 키를 누른 상태에서 N과 M을 눌러보십시오. 두 개의 TextBox 사이에서 포커스가 어떻게 이동하는지 확인할 수 있습니다.
여기에는 몇 가지 새로운 개념이 있습니다. 우선, 문자 앞에 밑줄 (_)을 넣어 액세스 키를 정의합니다. 첫 번째 문자 일 필요는 없으며 레이블 내용의 문자 앞에 올 수 있습니다. 일반적으로 이미 다른 컨트롤의 액세스 키로 사용되지 않은 첫 번째 문자를 사용합니다.
Target 속성을 사용하여 Label과 지정된 컨트롤을 연결합니다. ElementName 속성을 사용하여 표준 WPF 바인딩을 사용합니다. 표준 WPF 바인딩에 관한 내용은 추후에 다시 설명할 예정입니다. 바인딩은 컨트롤의 이름을 기반으로 하므로 컨트롤 이름을 변경하면 바인딩도 변경해야 합니다.
컨트롤을 Label 컨텐트로 사용
위에서 말했듯이 Label 컨트롤을 사용하면 다른 컨트롤을 제어하는 동시에 다른 이점도 취할 수 있습니다. Label 내부에 이미지와 텍스트가 둘다 있으면서 액세스 키도 가지고 있는 예제를 살펴봅시다.
<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="LabelControlAdvancedSample" Height="180" Width="250">
<StackPanel Margin="10">
<Label Target="{Binding ElementName=txtName}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
<AccessText Text="_Name:" />
</StackPanel>
</Label>
<TextBox Name="txtName" />
<Label Target="{Binding ElementName=txtMail}">
<StackPanel Orientation="Horizontal">
<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
<AccessText Text="_Mail:" />
</StackPanel>
</Label>
<TextBox Name="txtMail" />
</StackPanel>
</Window>
이것은 단순한 텍스트 문자열만 있던 앞의 예제를 확장 한 것입니다. 이제 Label은 이미지와 텍스트 둘다 호스트합니다, (컨트롤 내부의 AccessText는 label의 액세스 키 기능을 사용할 수 있도록 해줍니다) Label은 다른 ContentControl 과 마찬가지로 하나의 자식 컨트롤만 호스팅 할 수 있으므로, Image 컨트롤과 AccessText 컨트롤 모두 수평 StackPanel 내에 넣었습니다.
이 Tutorial의 뒷부분에서 설명할 Image 컨트롤은 원격 이미지를 사용합니다. 이 이미지들은 오직 예제에서만 사용하시고 실제 응용 프로그램에는 사용하지 마십시오.
요약
대부분의 경우, Label 컨트롤은 이름에서 볼 수 있다시피 다른 컨트롤의 텍스트 레이블 역할을 합니다. 이것은 Label 주요 목적입니다. 대부분 다른 경우는 TextBlock 컨트롤이나 WPF에서 제공하는 다른 텍스트 컨테이너들을 사용하는게 좋습니다.