Focus et TabIndex sur UserControls
J'ai un comportement étrange:
J'ai une MainWindow contenant des zones de texte et de (simple) usercontrols (textbox et un bouton), mais j'ai dépouillé qu'à une zone de texte à des fins de débogage.
Lorsque j'utilise des zones de texte et des usercontrols SANS définir une propriété TabIndex le curseur à travers les différentes étapes du contrôle dans le bon ordre (dans l'ordre où les contrôles sont ajoutés à la fenêtre)
Lorsque j'utilise des zones de texte et des usercontrols AVEC la définition d'une propriété TabIndex le curseur à travers les différentes étapes du contrôle dans l'ordre invalide (la première de toutes les usercontrols, puis toutes les zones de texte), c'est également le cas lorsque le TabIndex est fixée à une valeur correspondant à l'ordre dans lequel le contrôle a été ajouté
Voici mon usercontrol
<UserControl x:Class="SmallControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
>
<TextBox x:Name="txTEXT" Text="{Binding Text}" />
</UserControl>
Suivantes Mainwindow xaml conduit à l'ordre 000000,111111,222222,333333 ,c'est ok
<GroupBox Header="Small,Textbox,Small,TextBox without TabIndex">
<UniformGrid Columns="4">
<local:SmallControl Text="000000" />
<TextBox Text="111111" />
<local:SmallControl Text="222222" />
<TextBox Text="333333" />
</UniformGrid>
</GroupBox>
Suivantes Mainwindow xaml conduit à l'ordre 000000,222222,111111,333333, ce n'est PAS ok
<GroupBox Header="Small,Textbox,Small,TextBox with TabIndex">
<UniformGrid Columns="4">
<local:SmallControl TabIndex="0" Text="000000" />
<TextBox TabIndex="1" Text="111111" />
<local:SmallControl TabIndex="2" Text="222222" />
<TextBox TabIndex="3" Text="333333" />
</UniformGrid>
</GroupBox>
Est-il un moyen d'utiliser TabIndex sans être obligé d'ajouter des contrôles dans le "bon de commande" dans le code xaml?
Ce qui concerne
Klaus
OriginalL'auteur klawusel | 2011-10-31
Vous devez vous connecter pour publier un commentaire.
Par défaut, WPF lit tous les contrôles, à la fois à l'intérieur et à l'extérieur de UserControls, dans le même onglet niveau (à moins que spécifié autrement). Puisque les commandes à l'intérieur de l'objet UserControl n'ont pas de TabIndex spécifié, ils obtiennent des onglets à la dernière après le premier onglet du cycle.
Changer ce comportement, j'ai l'habitude de définir
IsTabStop="False"
sur mon UserControl définition, puis-je lier les commandes intérieures TabIndex pour le contrôle UserControl TabIndexUserControl XAML
L'utilisation de XAML
Vous pourriez également être en mesure d'obtenir la tabulation correctement par le réglage de la KeyboardNavigation.TabNavigation propriété attachée sur votre UserControl à Local. Je me souviens d'avoir des problèmes avec cela, mais honnêtement, je ne me souviens pas des détails, de sorte qu'il peut fonctionner.
Je vous remercie. On remarque ici: Mettre IsTabStop dans le usercontrol xaml n'a pas de travail pour moi, c'est d'être dans la "utilisation de xaml" comme Rachel répondu. SI vous avez plusieurs de ces vous pouvez le mettre en "parentcontrol.ressources" pour faire de votre xaml plus lisible.
OriginalL'auteur Rachel