102

視覚的には、次のスニペットの両方が同じUIを生成します。では、なぜ2つのコントロールがあるのです
か。Snippet1

<TextBlock>Name:</TextBlock>
<TextBox Name="nameTextBox" />

Snippet2

<Label>Name:</Label>
<TextBox Name="nameTextBox" />

まあ、私はこれに自分で答えるつもりです...これは私がプログラミングWPFから今日学んだ有用な一口だと思いました)

4

6 に答える 6

112

WPF Textblockは、ラベルコントロールのようにSystem.Windows.Controlから派生するのではなく、FrameworkElementから継承します。これは、Textblockがはるかに軽量であることを意味します。テキストブロックを使用することの欠点は、アクセス/アクセラレータキーがサポートされていないことと、ターゲットとして他のコントロールへのリンクがないことです。

テキストを単独で表示する場合は、TextBlockを使用します。利点は、テキストを表示するための軽量でパフォーマンスの高い方法です。

テキストをTextBoxなどの別のコントロールに関連付ける場合は、Labelコントロールを使用します。利点は、アクセスキーとターゲットコントロールへの参照です。

于 2008-09-12T17:58:17.653 に答える
20

ラベルには、重要なフォーカス処理の責任があります。その目的は、アクセスキーを使用してキャプションを配置できるようにすることです。アクセスキーのターゲットを示すTargetプロパティがありますこのような...

<Label Target="{Binding ElementName=nameTextBox}">_Name:</Label>
<TextBox x:Name="nameTextBox" />

Targetプロパティがない場合、Labelコントロールは何の役にも立ちません。「リクエストを処理できません」というアクセスキーを押すと、ビープ音が鳴ります。

于 2008-09-12T14:21:03.293 に答える
3

TextBlocks と Labels に関する混乱の 2 つの最大の理由は、Windows フォームと常識です。

  1. Windows フォームでフォームに小さなテキストをスラップしたい場合、Label を使用したため、(誤って) WPF Label で同じことを行うことになります。

  2. 常識的に考えると、Label は軽量で TextBlock は軽量ではないと考えるようになりますが、逆の場合はそうではありません。

Label 内に TextBlock を配置できることに注意してください。

于 2013-03-06T05:36:16.703 に答える
2

Label は、String、Number などのあらゆる種類のデータ入力を受け取ります。TextBlock は、その名前が示すように、Text 文字列のみを受け入れます。

于 2014-09-13T20:34:22.153 に答える
2

を使用TextBlockすると、簡単に複数行をサポートできると思いTextWrappingます。

Label検証メッセージを表示するなど、そのような場合に を使用するには、タグを使用する必要があります<AccessKey>が、これは より単純ではありませんTextBlock

一方、TextBlocknot を使用すると、プロパティを設定できなくなりBorderBrushます。

したがって、私にとっては、2 つのコントロールを組み合わせてテキスト フル機能のコントロールにする必要があります。

于 2010-10-30T12:37:45.143 に答える
-9

コントロールのラベルなど、最小限のテキスト サポートが必要な状況では、TextBlock の代わりに Label を使用できます。Label を使用すると、TextBlock よりもさらに少ないリソース (より軽量) を必要とするため、有利な場合があります。

于 2009-07-09T12:13:58.340 に答える