Microsoft .NET 4 70-511トレーニングキットによるWindowsアプリケーション開発によると
どちらもコンテンツコントロールであり、テキストを表示するだけなので、Label
コントロールとTextBlock
コントロールの違いは何ですか?
Microsoft .NET 4 70-511トレーニングキットによるWindowsアプリケーション開発によると
どちらもコンテンツコントロールであり、テキストを表示するだけなので、Label
コントロールとTextBlock
コントロールの違いは何ですか?
回答:
にもかかわらずTextBlock
System.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
ます。これは、非Control
xaml要素のデフォルトの動作です。
<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>
次の結果をもたらします:
詳細については、こちらをご覧ください。