WPF TextBlock 要素と Label コントロールの違いは何ですか?[重複]

StackOverflow https://stackoverflow.com/questions/59099

  •  09-06-2019
  •  | 
  •  

質問

この質問にはすでに答えがあります:

視覚的には、次のスニペットはどちらも同じ UI を生成します。では、なぜコントロールが 2 つあるのでしょうか。
スニペット1

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

スニペット2

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

(まあ、これは自分で答えるつもりですが…これは今日学んだ有益な情報だと思いました WPF のプログラミング)

役に立ちましたか?

解決

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

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

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

他のヒント

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

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

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

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

  1. Windows フォームでフォーム上に小さなテキストを貼り付けたいときは、ラベルを使用したため、(誤って) 同じことを WPF ラベルで行うことになります。

  2. 常識的に考えれば、Label は軽量で TextBlock は軽量ではないと考えられますが、その逆が当てはまります。

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

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

使用する Label そのような場合、例えば検証メッセージを表示するため、使用する必要があります <AccessKey> タグは、より単純ではありません。 TextBlock.

一方、使用すると、 TextBlock を設定することはできません BorderBrush 財産。

したがって、私にとって、2 つのコントロールはテキストの全機能を備えたコントロールに統合されるべきです。

Label は、文字列、数値などのあらゆる種類のデータ入力を受け取ります。TextBlock は、名前が示すように、テキスト文字列のみを受け入れます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top