[WPF] Comment scroller automatiquement dans une ListBox ?
La ListBox de WPF est un composant très pratique qui vous permet de stocker différents types de données.
Lorsqu'il n'y a pas assez de place pour afficher tous les éléments, une scrollbar (horizontale et/ou verticale) apparait, vous permettant d'effectuer un défilement. Si vous en avez besoin, vous avez la possibilité de provoquer le défilement automatique par du code: cela peut s'avérer très pratique à certains moment, par exemple lorsque vous ajouter, à la volée, un élément (en effet, la ListBox ne défile pas automatiquement sur le dernier élément ajouté).
Pour effectuer ce défilement par code, vous avez plusieurs possibilités. Tout d'abord, vous pouvez appeler la méthode ScrollIntoView, qui prend en paramètre l'objet vers lequel vous souhaitez défilé:
this.lb.ScrollIntoView(this.lb.Items.GetItemAt(this.lb.Items.Count - 1));
Une autre possibilité est d'accéder au composant ScrollViewer qui compose la ListBox. Pour cela, rien de plus simple: il suffit de faire appel à la méthode VisualTreeHelper.GetChild:
Border border = VisualTreeHelper.GetChild(this.lb, 0) as Border;
if (border != null)
{
ScrollViewer scrollviewer = VisualTreeHelper.GetChild(border, 0) as ScrollViewer;
if (scrollviewer != null)
{
//
}
}
Une fois que vous avez accès au ScrollViewer, libre à vous d'utiliser les méthodes de cet object, comme:
- ScrollToEnd
- ScrollToBottom
- Etc.
Une des méthodes intéressantes est la méthode ScrollToVerticalOffset, qui vous permet de faire défiler, de façon verticale, le contenu à la position précise d'un offset. Il est à noter que la même version existe en version horizontale (ScrollToHorizontalOffset):
Border border = VisualTreeHelper.GetChild(this.lb, 0) as Border;
if (border != null)
{
ScrollViewer scrollviewer = VisualTreeHelper.GetChild(border, 0) as ScrollViewer;
if (scrollviewer != null)
{
scrollviewer.ScrollToVerticalOffset(scrollviewer.ViewportHeight);
}
}
Bon développement à tous !
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :