2011-02-08 3 views
4

J'ai manuellement besoin de faire défiler le contenu d'un contrôle ListView vers la gauche.WPF: Comment faire pour faire défiler un contrôle ListView horizontal?

Il est appelé automatiquement lorsque j'appelle scrollIntoView mais uniquement si l'élément à faire défiler n'est pas visible. Le ListView défile jusqu'à l'élément et fait défiler horizontalement vers le côté gauche. Juste comme j'en ai besoin. Mais si l'élément à faire défiler est déjà visible, il ne se passera rien et c'est la raison pour laquelle je dois faire défiler la page manuellement vers la gauche.

+1

Si l'élément est déjà visible, quel autoscroll devrait montrer? – BertuPG

Répondre

3

Vous pouvez trouver le ScrollViewer pour le ListView en traversant l'arborescence Visual, puis en appelant le ScrollToLeftEnd. Quelque chose comme ceci devrait fonctionner

private void ScrollListViewToLeft(ListView listView) 
{ 
    ScrollViewer listViewScrollViewer = GetVisualChild<ScrollViewer>(listView); 
    listViewScrollViewer.ScrollToLeftEnd(); 
} 
private static T GetVisualChild<T>(DependencyObject parent) where T : Visual 
{ 
    T child = default(T); 
    int numVisuals = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < numVisuals; i++) 
    { 
     Visual v = (Visual)VisualTreeHelper.GetChild(parent, i); 
     child = v as T; 
     if (child == null) 
     { 
      child = GetVisualChild<T>(v); 
     } 
     if (child != null) 
     { 
      break; 
     } 
    } 
    return child; 
} 
+0

Fonctionne bien! Merci beaucoup. – TalkingCode

Questions connexes