2010-06-17 8 views
1

J'ai une Listbox affichant 5 éléments à la fois, horizontalement. Je veux implémenter un bouton 'Précédent' et 'Suivant' qui, lorsqu'on clique dessus, affichera l'ensemble précédent de 5, ou le prochain ensemble de 5 éléments. Je n'affiche pas la barre de défilement horizontale, car je ne veux pas qu'un utilisateur navigue avec cela.Faire défiler un VirtualizingStackPanel de ListBox avec les boutons

Y a-t-il déjà des fonctionnalités implémentées pour que je puisse le faire, ou dois-je écrire du code pour calculer les éléments que j'affiche, etc., dans les événements click du bouton?

Merci d'avance!

Répondre

1

Vous pouvez utiliser les commandes, comme ce ScrollViewer.PageUp() intégrés et ScrollViewer.PageDown():

public void ShowNextPage() 
{ 
    InvokeOnScrollViewer(listBox, viewer => viewer.PageDown()); 
} 

public void ShowPriorPage() 
{ 
    InvokeOnScrollViewer(listBox, viewer => viewer.PageUp()); 
} 

public void InvokeOnScrollViewer(ItemsControl control, Action<ScrollViewer> action) 
{ 
    for(Visual vis = control as Visual; VisualTreeHelper.GetChildCount(vis)!=0; vis = VisualTreeHelper.GetChild(vis, 0)) 
    if(vis is ScrollViewer) 
    { 
     Action((ScrollViewer)vis); 
     break; 
    } 
} 

Comment ça marche: InvokeOnScrollViewer balaye vers le bas l'arbre visuel jusqu'à ce qu'il trouve le ScrollViewer, appelle ensuite l'action donnée, soit PageUp() ou PageDown(). Lorsque votre ItemsPanel est un StackPanel (de l'orientation, de la virtualisation ou non), ScrollViewer.PageUp() recule d'une fenêtre et ScrollViewer.PageDown() avance d'une fenêtre. En d'autres termes, si votre ListBox affiche cinq éléments, ces commandes le déplacent par cinq éléments.

+0

Salut Ray, j'utilise cette implémentation avec une nouvelle question que j'ai ici http://stackoverflow.com/questions/3098383/previewmouseleftbuttondown-not-firing - Voudrais choisir ton cerveau pour voir si tu as des idées sur pourquoi j'ai des problèmes. Merci encore pour l'aide jusqu'à présent! – TheGeekYouNeed

0

Regardez la méthode ListBox.ScrollIntoView().

+0

Je cherchais quelque chose comme DisplayNext() ou quelque chose déjà mis en œuvre - dans le cas où je donnais sur quelque chose de vraiment simple. J'allais implémenter ScrollIntoView mais je voulais m'en assurer avant. Merci d'avoir répondu. – TheGeekYouNeed

+0

Cette réponse est fausse, ou à tout le moins trompeuse. Vous pouvez utiliser ScrollViewer.PageUp() et ScrollViewer.PageDown() pour faire exactement ce que vous demandez. Je viens d'écrire une réponse qui explique comment. –

+0

Tenez-vous sur Ray. Pourquoi dites-vous que c'est faux? C'est plus général oui, mais ce n'est pas faux. – Anvaka

Questions connexes