LabelとTextBlockの違い


132

Microsoft .NET 4 70-511トレーニングキットによるWindowsアプリケーション開発によると

どちらもコンテンツコントロールであり、テキストを表示するだけなので、LabelコントロールとTextBlockコントロールの違いは何ですか?


1
Silverlightでは、検証後にLabelコントロール自体が変更されます(テキストは赤くなります)。ただし、WPFは異なります。
vortexwolf

回答:


215

TextBlockはコントロールではありません

にもかかわらずTextBlockSystem.Windows.Controls名前空間での生活、それはコントロールではありません。から直接派生しFrameworkElementます。一方、ラベルはから派生しContentControlます。つまり、次のLabelことが可能になります。

  1. Templateプロパティを介して)カスタムコントロールテンプレートが与えられます。
  2. Contentプロパティを介して)単なる文字列以外のデータを表示します。
  3. DataTemplateコンテンツに(ContentTemplateプロパティを介して)を適用します。
  4. 他にContentControlできること、FrameworkElementできないことを実行します。

    • Label 無効にするとテキストがグレー表示される
    • Label アクセスキーをサポート
    • Label よりはるかに重い TextBlock

ソース

以下のより興味深い読み物


1
2つ目のポイントは、DateTimeをTextBlockにバインドすることです。
oddRaven 2017

26

ラベルは通常、1行のテキスト出力をサポートしていますが、TextBlockは複数行のテキスト表示を目的としています。

たとえば、wpfでは、TextBlockにはTextWrapping複数行の入力を可能にするプロパティがあります。ラベルにこれはありません。


4
ラベルには任意のContentプロパティがあります。これは文字列にすることもできますが、TextBlock(またはその他のコントロール)にすることもできるため、TextBlockをコンテンツとして使用して、ラベルを複数行にすることができます。
ジムバルター2016年

26

LabelであるContentControlあなたはそれのためのコンテンツとして何を設定することができることを意味しています。文字列、数値、日付、その他のコントロール、画像、形状など、絶対に何でもTextBlock処理できstringsます。


3
「その他のコントロール」にはTextBlockが含まれるため、たとえば、ラベルにラップされたテキストを含めることができます。
ジムバルター2016年

9

TextBlockとLabelはどちらもテキストの表示に使用されますが、実際にはまったく異なります。

=> Labelは、考えられるほとんどすべてのUIの表示を可能にする基本クラスであるContentControlを継承します。

=> 一方、TextBlockはFrameworkElementから直接継承するため、Controlから継承するすべての要素に共通する動作がありません。TextBlockの浅い継承階層により、コントロールはLabelよりも軽量になり、より単純で非インタラクティブなシナリオに適しています。

PS:ただし、アクセスキーを機能させたい場合や、より柔軟なグラフィックデザインが必要な場合は、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.