2013-08-26 2 views
1

Mon usercontrol a Listbox avec images ListboxItems, ici, je suis face à un problème lorsque je navigue articles listbox (images) en utilisant « touches fléchées », i could'n naviguer dans les éléments qui est présente dans le prochain ligne, disons par exemple, boîte de liste contient des lignes d'images * (« Je l'ai utilisé WrapPanel ») *, si je navigue un images à l'aide droite i flèche clé ne peux pas en mesure de se déplacer à la ligne suivante,Naviguer listboxitems l'aide des touches fléchées

<ListBox.ItemContainerStyle> 
    <Style TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" /> 
    <Setter Property="IsTabStop" Value="True" /> 
    </Style> 
</ListBox.ItemContainerStyle> 

Répondre

2

Basé sur this answer qui a presque fonctionné, mais pas tout à fait.

Placez un événement KeyDown sur votre ListBox et utilisez ItemsCollection pour sélectionner l'élément suivant ou précédent lorsque vous voyez une pression vers la droite ou vers la gauche.

Cela déplace la sélection, mais pas le focus clavier (ligne pointillée), vous devez donc également appeler MoveFocus sur l'élément qui a le focus sur le clavier.

private void ListBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    var list = sender as ListBox; 
    switch(e.Key) 
    { 
     case Key.Right: 
      if(!list.Items.MoveCurrentToNext()) list.Items.MoveCurrentToLast(); 
      break; 

     case Key.Left: 
      if(!list.Items.MoveCurrentToPrevious()) list.Items.MoveCurrentToFirst(); 
      break; 
    } 

    e.Handled = true; 
    if(list.SelectedItem != null) 
    { 
     (Keyboard.FocusedElement as UIElement).MoveFocus(new TraversalRequest(FocusNavigationDirection.Next)); 
    } 
} 

Enfin, assurez-vous que vous avez IsSynchronizedWithCurrentItem="True" sur votre ListBox.

Cela vous donnera le comportement enveloppant que vous voulez.

+0

, merci pour la réponse yhe, dans mon projet, nous traitons keydown/keypres..etc avec le niveau windowsAPI, ce qui est une autre application, donc je ne peux pas écrire événement Keydown spécifique à ma demande, je cherchais, il a à faire dans le XAML lui-même, est-il possible de faire dans le fichier XAML ?? – Selva

+0

Je ne sais pas comment vous le feriez (ou si c'est possible) uniquement en XAML. – josh2112

Questions connexes