This article has been localized into French by the community.
Le contrôle Label
Le contrôle Label, sous sa forme la plus simple, ressemble beaucoup au TextBlock que nous avons utilisé dans un autre article. Cependant vous remarquerez vite que plutôt que d'avoir une propriété Text ("texte"), le Label possède une propriété Content ("contenu"). La raison pour cela est que le Label peut contenir n'importe quel type de contrôle, plutôt que seulement du texte. Le contenu peut toutefois être du texte également, comme vous allez le voir dans ce premier exemple très basique :
<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>
Une autre chose que vous remarquerez peut-être est que par défaut, le Label a une petite marge, ce qui permet au texte d'être affiché à quelques pixels d'écart du coin haut gauche de la fenêtre. Ce n'est pas le cas du contrôle TextBlock, où vous devez le faire manuellement.
Pour un cas simple comme celui-ci, où le contenu est simplement un texte, le Label va en fait créer un TextBlock en interne et afficher votre texte dedans.
Le contrôle Label vs. le contrôle TextBlock
Mais alors pourquoi utiliser un Label ? Eh bien, il existe quelques différences importantes entre le Label et le TextBlock. Le TextBlock ne vous permet que d'afficher un texte simple, tandis que le Label vous permet aussi de :
- Donner une bordure
- Afficher d'autres contrôles, par exemple une image
- Utiliser du contenu depuis un modèle grâce à la propriété ContentTemplate
- Utiliser les touches d'accès pour donner le focus aux contrôles ciblés.
Ce dernier point est l'une des raisons principales qui poussent à l'utilisation d'un Label plutôt que d'un contrôle TextBlock. Chaque fois que vous voulez afficher un simple texte, vous devriez utiliser un contrôle TextBlock, dans la mesure où il est plus léger et souvent plus performant qu'un Label.
Label et touches d'accès (mnémoniques)
Dans Windows comme dans n'importe quel autre système d'exploitation, c'est une pratique courante que de pouvoir accéder à une boîte de dialogue en maintenant enfoncée la touche [Alt] et en pressant un caractère qui correspond au contrôle auquel vous désirez accéder. Le caractère à presser sera mis en surbrillance quand vous maintiendrez enfoncée la touche [Alt]. Le contrôle TextBlock n'implémente pas cette fonctionnalité, mais le Label le fait, dès lors, pour les labels, le contrôle Label est un choix excellent. Voyons un exemple de cela en action :
<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>
La copie d'écran montre notre exemple de boite de dialogue quand la touche Alt est activée. Essayez de le lancer, appuyer sur la touche Alt puis sur les touches N et M. Vous verrez comment le focus se déplace entre les deux TextBox.
Plusieurs nouveaux concepts sont introduits ici. Tout d'abord, on définit une touche d'accès en plaçant un "underscore" (_) avant le caractère. Ça n'est pas nécessairement le premier caractère, l'underscore peut précéder n'importe quel caractère du contenu label. La pratique courante est d'utiliser le premier caractère qui n'est pas déjà utilisé comme touche d'accès pour un autre contrôle.
On utilise la propriété Target pour lier le Label et le contrôle désigné. On utilise un binding standard de WPF pour ça, en utilisant la propriété ElementName. Tout ça sera expliqué plus tard dans ce tutoriel. Le binding se base sur le nom du contrôle, donc si vous changez ce nom, vous devrez également vous rappeler de changer le binding.
Utiliser des contrôles comme contenu d'un Label
Comme mentionné précédemment, le contrôle Label permet d'y insérer d'autres contrôles, tout en gardant ses autres avantages. Prenons comme exemple une image et un peu de texte à l'intérieur du Label, tout en ayant une touche d'accès pour chacun des labels :
<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>
Cet exemple n'est qu'une extension du précédent. Au lieu d'un simple texte, notre Label contient maintenant une image et un texte (dans un contrôle AccessText, qui nous permet d'utiliser une touche d'accès pour le label). Les deux contrôles sont contenus dans un StackPanel horizontal, étant donné que le Label, comme n'importe quel autre contrôle dérivé de ContentControl, ne peut contenir qu'un seul contrôle enfant direct.
Le contrôle Image, décrit plus loin dans ce tutoriel, utilise une image distante. Ceci est fait UNIQUEMENT à des fins de démonstration et n'est PAS une bonne idée pour la plupart des applications réelles.
Résumé
Dans la plupart des situations, le contrôle Label fait exactement ce que son nom suggère. Il agit comme un label textuel pour un autre contrôle. C'est son rôle principal. Pour la plupart des autres cas, il est probablement plus judicieux d'utiliser un TextBlock ou un des autres conteneurs de texte que propose WPF.