web-dev-qa-db-ja.com

LabelとTextBlockの違い

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

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

118
Rami Shareef

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

TextBlockはSystem.Windows.Controls名前空間に存在しますが、コントロールではありません。 FrameworkElementから直接派生します。一方、ラベルはContentControlから派生します。これは、Labelができることを意味します。

  1. カスタムコントロールテンプレートを(Templateプロパティを介して)指定します。
  2. 文字列以外のデータを表示します(Contentプロパティを使用)。
  3. DataTemplateをそのコンテンツに適用します(ContentTemplateプロパティを使用)。
  4. ContentControlができることは何でもできますが、FrameworkElementはできません。

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

ソース

以下のいくつかの興味深い読み物

195
biju

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

24
Snowbear

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

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

23
rene_buehling

TextBlockとLabelは両方ともテキストを表示するために使用されますが、裏ではまったく異なります。

=> ラベルは、ContentControlを継承します。これは、考えられるほぼすべてのUIの表示を可能にする基本クラスです。

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

PS:ただし、アクセスキーを使用したい場合、またはより柔軟なまたはグラフィカルなデザインが必要な場合は、Labelを使用する必要があります。

8