Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

[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 :
Posted: jeudi 29 mai 2008 10:22 par Thomas LEBRUN
Classé sous : ,

Commentaires

patrice a dit :

# mai 29, 2008 10:38

Thomas LEBRUN a dit :

Erf.... Désolé Patrice, je n'avais pas vu que tu avais déjà blogger dessus, avec un 3ème technique intéressant qui plus est :(

# mai 29, 2008 10:40

simon ferquel a dit :

Ah tiens, tu peux utiliser ca aussi pour "trouver" le ScrollViewer qui va bien dans ton arbre visuel :

http://www.simonferquel.net/blog/archive/2007/11/25/net-3.5-quand-les-meacutethodes-dextensions-viennent-au-secours-de-wpf.aspx

# mai 29, 2008 15:59

Thomas LEBRUN a dit :

Oui mais bon là, le but, c'est que mes lecteurs arrivent à comprendre le code: j'ai pas envie de les perdre :)

# mai 29, 2008 16:05
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau système d'aide pour Visual Studio 2010 : pour ceux qui n'apprécient pas trop l'absence d'index... par CoqBlog le il y a 17 heures et 27 minutes

- L'interface naturelle de Windows Phone 7 Series par Perspective le il y a 18 heures et 44 minutes

- Comment mapper une vue SQL sur une collection de complex type? par Matthieu MEZIL le 03-19-2010, 21:05

- SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par SQL Server vu par Christian Robert le 03-19-2010, 15:06

- [WF4] Un Binding Activity/ActivityDesigner qui passe mal? par Blog de Jérémy Jeanson le 03-19-2010, 13:42

- MyTIC – SharePoint 2010 : déjà un mythe Microsoft ? par Le Blog (Vert) d'Arnaud JUND le 03-19-2010, 08:54

- TechDays 2010 Genève : Retrouvez-moi pour une session sur la Haute disponibilité et le ScaleOut avec SQL Server par SQL Server vu par Christian Robert le 03-18-2010, 15:45

- [MIX10] Keynote deuxième journée – Internet Explorer 9, Html5, Visual Studio 2010, OData par Atteint de JavaScriptite Aiguë [Cyril Durand] le 03-17-2010, 19:40

- Certifications beta .NET 4 par Kévin Gosse le 03-17-2010, 19:33

- [Mix 2010] – Microsoft Translator Technology Preview V2 par RedoBlog - The .NET Gentleman !!! le 03-17-2010, 18:53