WPF TextBlock 要素と Label コントロールの違いは何ですか?[重複]
-
09-06-2019 - |
質問
この質問にはすでに答えがあります:
- ラベルとテキストブロックの違い 4 つの答え
視覚的には、次のスニペットはどちらも同じ 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 フォームと常識です。
Windows フォームでフォーム上に小さなテキストを貼り付けたいときは、ラベルを使用したため、(誤って) 同じことを WPF ラベルで行うことになります。
常識的に考えれば、Label は軽量で TextBlock は軽量ではないと考えられますが、その逆が当てはまります。
TextBlock を Label 内に配置できることに注意してください。
と TextBlock
複数行のサポートを簡単に実現できると思います - を使用すると、 TextWrapping
.
使用する Label
そのような場合、例えば検証メッセージを表示するため、使用する必要があります <AccessKey>
タグは、より単純ではありません。 TextBlock
.
一方、使用すると、 TextBlock
を設定することはできません BorderBrush
財産。
したがって、私にとって、2 つのコントロールはテキストの全機能を備えたコントロールに統合されるべきです。
Label は、文字列、数値などのあらゆる種類のデータ入力を受け取ります。TextBlock は、名前が示すように、テキスト文字列のみを受け入れます。
Label は、コントロールのラベルなど、最小限のテキスト サポートが必要な状況で TextBlock の代替として使用できます。Label を使用すると、TextBlock よりもさらに少ないリソース (軽量) が必要になるため、有利な場合があります。