Microsoft .NET 4 70-511トレーニングキットによるWindowsアプリケーション開発によると
どちらもコンテンツコントロールであり、テキストを表示するだけなので、LabelコントロールとTextBlockコントロールの違いは何ですか?
Microsoft .NET 4 70-511トレーニングキットによるWindowsアプリケーション開発によると
どちらもコンテンツコントロールであり、テキストを表示するだけなので、LabelコントロールとTextBlockコントロールの違いは何ですか?
回答:
にもかかわらずTextBlockSystem.Windows.Controls名前空間での生活、それはコントロールではありません。から直接派生しFrameworkElementます。一方、ラベルはから派生しContentControlます。つまり、次のLabelことが可能になります。
Templateプロパティを介して)カスタムコントロールテンプレートが与えられます。Contentプロパティを介して)単なる文字列以外のデータを表示します。DataTemplateコンテンツに(ContentTemplateプロパティを介して)を適用します。他にContentControlできること、FrameworkElementできないことを実行します。
Label 無効にするとテキストがグレー表示されるLabel アクセスキーをサポートLabel よりはるかに重い TextBlock以下のより興味深い読み物
ラベルは通常、1行のテキスト出力をサポートしていますが、TextBlockは複数行のテキスト表示を目的としています。
たとえば、wpfでは、TextBlockにはTextWrapping複数行の入力を可能にするプロパティがあります。ラベルにこれはありません。
LabelであるContentControlあなたはそれのためのコンテンツとして何を設定することができることを意味しています。文字列、数値、日付、その他のコントロール、画像、形状など、絶対に何でもTextBlock処理できstringsます。
TextBlockとLabelはどちらもテキストの表示に使用されますが、実際にはまったく異なります。
=> Labelは、考えられるほとんどすべてのUIの表示を可能にする基本クラスであるContentControlを継承します。
=> 一方、TextBlockは、FrameworkElementから直接継承するため、Controlから継承するすべての要素に共通する動作がありません。TextBlockの浅い継承階層により、コントロールはLabelよりも軽量になり、より単純で非インタラクティブなシナリオに適しています。
PS:ただし、アクセスキーを機能させたい場合や、より柔軟なグラフィックデザインが必要な場合は、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>
次の結果をもたらします:
詳細については、こちらをご覧ください。