This article is currently in the process of being translated into French (~99% done).
Tab Order
Si vous avez travaillé avec un ordinateur suffisamment longtemps pour apprendre la programmation, vous savez probablement aussi que vous pouvez utiliser la touche de tabulation du clavier pour naviguer dans une fenêtre / un dialogue. Cela vous permet de garder les mains sur le clavier lorsque vous remplissez un formulaire ou quelque chose de similaire, au lieu de devoir utiliser la souris pour sélectionner le champ/contrôle suivant.
WPF supporte ce comportement par défaut, et même mieux: il établira automatiquement l'ordre utilisé lors du passage d'un champ à un autre, donc, en général, vous n'avez pas à vous inquiéter de cela. Cependant, la conception de votre fenêtre/boîte de dialogue amène parfois WPF à utiliser un ordre de tabulation avec lequel vous n'êtes peut-être pas d'accord, pour diverses raisons. Vous pouvez également décider que certains contrôles ne doivent pas faire partie de l'ordre de tabulation. Permettez-moi d'illustrer cela avec un exemple:
Cette boîte de dialogue consiste en une Grid, divisée au milieu, avec un StackPanel de chaque côté, contenant des étiquettes et des zones de texte. Le comportement par défaut de l'ordre de tabulation consiste à démarrer avec le premier contrôle de la fenêtre, puis à parcourir chacun des contrôles enfants trouvés dans celle-ci avant de passer au contrôle suivant. Étant donné que le dialogue se compose de StackPanels orientés verticalement, cela signifie que nous devrions commencer dans le champ First Name, puis passer au champ Street name , puis City, avant de passer au StackPanel numéro deux, contenant les champs pour Name et Zip Code . Lors de la sortie du deuxième StackPanel, les deux boutons seront finalement atteints.
Cependant, pour cette boîte de dialogue, ce n'est pas le comportement que je veux. Au lieu de cela, je souhaite passer de First name à Last name (donc en se déplaçant essentiellement horizontalement au lieu de verticalement), et en plus de cela, je ne souhaite pas entrer le champ City lors de la tabulation du formulaire, car il sera automatiquement renseigné en fonction du Zip code de cette boîte de dialogue imaginaire et a donc été créé en lecture seule. Pour ce faire, je vais utiliser deux propriétés: TabIndex et IsTabStop . TabIndex est utilisé pour définir l'ordre, tandis que la propriété IsTabStop forcera WPF à ignorer un contrôle lors de la navigation dans la fenêtre. Voici les balises utilisées pour créer la boîte de dialogue:
<Window x:Class="WpfTutorialSamples.Control_concepts.TabOrderSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTutorialSamples.Control_concepts"
mc:Ignorable="d"
Title="TabOrderSample" Height="250" Width="400">
<Grid Margin="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel>
<Label>First name:</Label>
<TextBox TabIndex="0" />
<Label>Street name:</Label>
<TextBox TabIndex="2" />
<Label>City:</Label>
<TextBox TabIndex="5" IsReadOnly="True" IsTabStop="False" Background="Gainsboro" />
</StackPanel>
<StackPanel Grid.Column="2">
<Label>Last name:</Label>
<TextBox TabIndex="1" />
<Label>Zip Code:</Label>
<TextBox TabIndex="4" />
</StackPanel>
<Button Grid.Row="1" HorizontalAlignment="Right" Width="80">Add</Button>
<Button Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Width="80">Cancel</Button>
</Grid>
</Window>
Notez que j'ai simplement attribué un numéro à chaque contrôle important dans la propriété TabIndex , puis que j'ai utilisé le IsTabStop pour la zone de texte utilisée pour City. C'est aussi simple que de contrôler l'ordre de tabulation dans une boîte de dialogue!
Résumé
Contrôler l'ordre de tabulation d'une boîte dialogue est très important, mais heureusement pour nous, WPF réussit très bien à définir automatiquement un ordre de tabulation approprié. Cependant, dans certains cas, il sera judicieux de prendre le contrôle en utilisant les propriétés TabIndex et IsTabStop , comme illustré dans l'exemple ci-dessus.