TextBlockとLabelの違い
About
文字列をGUI上に表示するためにはTextBlockやLabelを利用することが一般的であると思われますが、それぞれの違いについてまとめておきます。
継承関係の違い
WPFを深いところまで利用する必要がある開発者でなければ、不要な情報になるかもしれませんが、TextBlockはControlクラスを親に持たず、継承関係にありません。一方でLabelはControlクラスを継承しています。両者の差によって、以降で解説する差異が発生しています。Controlを対象にするような実装を行うときに、TextBlockを一般的なコントロールと同様のControlの継承クラスと思い込んで実装してしまうのは危険です。
テキストかContentか
TextBlockは文字列のみを表示することができます。一方でLabelの方はContentに与えられる全てのオブジェクトに対応することができます。
(_)アンダーバー・下線の表示
Labelではその表記にアンダーバー(_)が利用できません。なぜならば、コントロールが持つ機能の1つである"アクセスキー"に対応しているからです。アクセスキーは例えば"_A"と記述すると、"A"キーを押すことでその(対象となる)コントロールにフォーカスがジャンプします。
エスケープ文字を利用すればアンダーバーを表示することができるかもしれません(未検証)。
アンダーラインなどのテキストの装飾とは異なります。装飾に関してはTextBlockでも利用することができます。