[wpf] Label과 TextBlock의 차이점

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

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



답변

TextBlock은 컨트롤이 아닙니다

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

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

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

출처

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


답변

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

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


답변

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


답변

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

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

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

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


답변

아마도 가장 성가신 특징은 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>

결과는 다음과 같습니다.

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

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


답변