TOC

This article is currently in the process of being translated into Japanese (~90% done).

Basic controls:

The Label control

Labelコントロールは最も単純なフォームで、他の章で扱ったTextBlockととても似ています。LabelはTextプロパティの代わりにContentプロパティを持っていることに気付くでしょう。これは、Labelがテキストだけではなく、どんな種類のコントロールも内部に直接ホストできるからです。しかし最初の大変基本的な例に示すように、コンテンツを文字列とすることも出来ます。

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlSample" Height="100" Width="200">
    <Grid>
		<Label Content="This is a Label control." />
	</Grid>
</Window>

Labelはデフォルトで少しだけ余白が有ることに気付くかもしれません。テキストは左上の角から少し離れたところに表示されます。マニュアルで調整しなければならないTextBlockコントロールの場合とは異なります。

コンテンツが単純文字列のような単純なケースではLableは内部的にTextBlockを作ってその中に文字列を表示しています。

LabelコントロールとTextBlockコントロール

では、何故Labelを使うのでしょうか?それはLabelとTextBlockでいくつかの重要な違いが有るからです。TextBlockはテキストだけを描画しますが、Labelは以下が出来ます。

  • ボーダーの設定
  • イメージのような他のコントロールの描画
  • ContentTemplateプロパティを使ったテンプレートコンテンツの使用
  • 関連するコントロールにフォーカスを与えるためのアクセスキーの使用

最後の項目がTextBlockコントロールよりもLabelを使う実質的な主な理由です。単純なテキストを描画するだけの場合はTextBlockコントロールを使うべきです。それは軽くて、ほとんどの場合Labelよりもパフォーマンスが良いからです。

Labelとアクセスキー(ニーモニック)

Windowsや他のOSでも同じように一般的な動作として、[Alt]キーを押しながらアクセスしたいコントロールに関連付けられたキャラクタのキーを押すことで、そのコントロールにアクセスできます。 押すべきキャラクタは[Alt]キーを押し下げたときにハイライトされます。 TextBlockコントロールはこの機能を持っていませんがLabelにはあります。なので、コントロールラベルとしてLabelコントロールは最適です。 実際の例を見てみましょう。

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlSample" Height="180" Width="250">
	<StackPanel Margin="10">
		<Label Content="_Name:" Target="{Binding ElementName=txtName}" />
		<TextBox Name="txtName" />
		<Label Content="_Mail:" Target="{Binding ElementName=txtMail}" />
		<TextBox Name="txtMail" />
	</StackPanel>
</Window>

このスクリーンショットはAltキーを押したときのサンプルダイアログです。[Alt]キーを押し下げてNとMキーを押してみて下さい。どのように二つのTextBox間にフォーカスが移動するかわかるでしょう。

いくつかの新しい概念があります。1つ目はキャラクタの前にアンダースコア(_)を書いてアクセスキーを定義します。最初のキャラクタではない場合、ラベル文字列のどのキャラクタの前でも大丈夫です。一般的に、既に他のコントロールに使われていない場合は最初のキャラクタを使います。

Targetプロパティを使ってLabelコントロールと特定のコントロールを関係付けます。これには標準のWPFバインディングでElementNameプロパティを使います。この詳細についてはチュートリアルの後で議論します。バインディングはコントロールの名前に基づいて行われるので、この名前を変えたら、バインディングも変更することを忘れないで下さい。

Labelのコンテンツとしてコントロールを使う

既に述べたようにLabelコントロールは他のコントロールをホストすることが出来、別の利点も持っています。内部にイメージと小さなテキストの両方を持ったLabelで、それぞれのラベルにアクセスキーも持っている例を試しましょう。

<Window x:Class="WpfTutorialSamples.Basic_controls.LabelControlAdvancedSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="LabelControlAdvancedSample" Height="180" Width="250">
	<StackPanel Margin="10">
		<Label Target="{Binding ElementName=txtName}">
			<StackPanel Orientation="Horizontal">
				<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_green.png" />
				<AccessText Text="_Name:" />
			</StackPanel>
		</Label>
		<TextBox Name="txtName" />
		<Label Target="{Binding ElementName=txtMail}">
			<StackPanel Orientation="Horizontal">
				<Image Source="http://cdn1.iconfinder.com/data/icons/fatcow/16/bullet_blue.png" />
				<AccessText Text="_Mail:" />
			</StackPanel>
		</Label>
		<TextBox Name="txtMail" />
	</StackPanel>
</Window>

これは以前の例を拡張したバージョンです。単純文字列の代わりに、このLabelはイメージと短いテキスト(内部にラベルのアクセスキーが使えるようになるAccessTextコントロールがある)の両方をホストしています。Labelは他のContentControlから派生したコントロールと同じように1つの子コントロールだけしかホストできないので、二つのコントロールは水平StackPanelの中に入れています。

イメージコントロールについては、このチュートリアルで後に議論しますが、リモートイメージを使っています。これはデモンストレーションのためだけであって、実際のアプリケーションには適しません。

まとめ

多くの場合、Labelコントロールは名前が示すとおり、つまり他のコントロールのラベルとして動作します。これがLabelコントロールの主な目的です。もっと他の場合にはWPFが提供するTextBlockコントロールやその他のテキストコンテナを使うべきでしょう。


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!