Label과 TextBlock의 차이점


132

Microsoft .NET 4 70-511 Training Kit 를 사용한 Windows 응용 프로그램 개발 에 따르면

컨텐츠 컨트롤과 텍스트 만 표시되므로 Label컨트롤과 TextBlock컨트롤 의 차이점은 무엇입니까 ?


1
Silverlight에서 유효성 검사 후 레이블 컨트롤 자체가 변경됩니다 (텍스트가 빨간색이 됨). 그러나 WPF는 다릅니다.
vortexwolf

답변:


215

TextBlock은 컨트롤이 아닙니다

비록 TextBlockSystem.Windows.Controls의 삶 네임 스페이스, 그것을 제어하지 않습니다. 에서 직접 파생됩니다 FrameworkElement. 반면에 레이블은에서 파생됩니다 ContentControl. 이는 다음을 수행 Label할 수 있음을 의미합니다 .

  1. Template속성을 통해 사용자 지정 컨트롤 템플릿을 제공하십시오 .
  2. Content속성 이외의 문자열 이외의 데이터를 표시합니다 .
  3. DataTemplate( ContentTemplate속성을 통해 ) 내용에 a 를 적용하십시오 .
  4. 어떤 다른을 마 ContentControlA는 그렇게 할 수 FrameworkElement없습니다.

    • Label 비활성화되면 텍스트가 회색으로 표시됩니다
    • Label 액세스 키 지원
    • Label 보다 무겁다 TextBlock

출처

아래에 좀 더 흥미로운 읽을 거리


1
두 번째 시점에서 : DateTime을 TextBlock에 바인딩 할 수 있습니다.
oddRaven

26

레이블은 일반적으로 한 줄 텍스트 출력을 지원하지만 TextBlock은 여러 줄 텍스트 표시를위한 것입니다.

예를 들어 wpf에서 TextBlock에는 여러 줄 TextWrapping입력을 가능하게 하는 속성 이 있습니다. 라벨에는 없습니다.


4
레이블에는 임의의 Content 속성이 있습니다. 문자열 일 수 있지만 TextBlock (또는 다른 컨트롤) 일 수도 있으므로 TextBlock을 내용으로 사용하여 레이블을 여러 줄로 만들 수 있습니다.
Jim Balter

26

Label이다 ContentControl이는 당신이 그것을위한 콘텐츠로 무엇이든 설정할 수 있다는 것을 의미한다. 문자열, 숫자, 날짜, 기타 컨트롤, 이미지, 도형 등을 포함한 모든 것은 TextBlock처리 할 수 ​​있습니다 strings.


3
"다른 컨트롤"에는 TextBlock이 포함되어 있으므로 Label에 래핑 된 텍스트가 포함될 수 있습니다.
Jim Balter

9

TextBlock과 Label은 모두 텍스트를 표시하는 데 사용되지만 표지 아래에서는 상당히 다릅니다.

=> Label 은 상상할 수있는 거의 모든 UI를 표시 할 수있는 기본 클래스 인 ContentControl 에서 상속 합니다.

반면에 => TextBlockFrameworkElement 에서 직접 상속 하므로 Control에서 상속되는 모든 요소에 공통적 인 동작이 누락됩니다. TextBlock의 얕은 상속 계층 구조는 컨트롤을 Label보다 가벼워 단순하고 비대화 형 시나리오에 더 적합합니다.

추신 : 그러나 액세스 키 가 작동하거나보다 유연하거나 그래픽적인 디자인을 원하면 레이블을 사용해야합니다.


0

아마도 가장 성가신 특징은 TextBlock암시 적 스타일 조회 동작이며, 가장 가까운 범위에만 속합니다 DataTemplate. 이것은 Controlxaml 이 아닌 요소 의 기본 동작입니다 .

<StackPanel Orientation="Vertical">
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Foreground" Value="Red"/>
        </Style>

        <Style TargetType="Label">
            <Setter Property="Foreground" Value="Red"/>
        </Style>
    </StackPanel.Resources>

    <ContentControl Content="Test">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding}"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>

    <ContentControl Content="Test">
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <Label Content="{Binding}"/>
            </DataTemplate>
        </ContentControl.ContentTemplate>
    </ContentControl>
</StackPanel>

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

자세한 내용은 여기를 참조 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.