2010-02-09 6 views
2

J'ai un TreeView dans Silverlight 3.SL3 TreeView Non Programmatically Scrolling

Le TreeView est lié à une collection observable - qui contient une liste de données hiérarchiques. Lors du chargement initial de la page, tous les nœuds, par défaut, dans l'arborescence, sont réduits.

J'ai des fonctionnalités qui permettent à un certain article dans l'arborescence d'être sélectionné par programme.

Le problème que je rencontre est lorsqu'un élément est sélectionné qui n'est pas immédiatement visible (c'est-à-dire qu'un ou plusieurs nœuds parents sont réduits). Je les développe par programmation, mais lorsque j'essaie de faire défiler la vue par programmation, l'utilisateur peut voir l'élément sélectionné, cela ne fonctionne pas.

J'ai examiné cela plus en détail, et je crois que cela a à voir avec la hauteur de la fenêtre d'affichage calculée pour le visualiseur de défilement. Cela ressemble presque à un problème de synchronisation, car, si le nœud parent de l'élément est développé, puis l'élément est sélectionné par programmation, le code qui fait défiler l'arborescence dans la vue pour cet élément TreeView sélectionné fonctionne parfaitement.

Veuillez vous reporter à la méthode d'extension ci-dessous que j'utilise pour faire défiler l'arborescence en vue. Toute aide ou suggestion sur la façon de corriger cela serait grandement appréciée.

Merci.

public static void BringIntoViewForScrollViewer(this FrameworkElement frameworkElement, ScrollViewer scrollViewer) 
    { 
     var transform = frameworkElement.TransformToVisual(scrollViewer); 
     var positionInScrollViewer = transform.Transform(new Point(0, 0)); 

     if (positionInScrollViewer.Y < 0 || positionInScrollViewer.Y > scrollViewer.ViewportHeight) 
      scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + positionInScrollViewer.Y - ScrollPadding); 
    } 
+3

Avez-vous essayé d'appeler UpdateLayout() sur le TreeView ou ScrollViewer entre l'expansion des noeuds et appeler votre méthode d'extension pour assurer les propriétés VerticalOffset et ViewportHeight sont à jour? –

+0

Voilà, il a fallu appeler UpdateLayout sur TreeView et ScrollViewer. Merci! – Chris

+0

Pourriez-vous ajouter cela comme réponse officielle + marquez-le comme répété afin qu'il n'apparaisse pas dans les recherches sans réponse. –

Répondre

1

Appel UpdateLayout sur le TreeView ou ScrollViewer entre l'expansion des noeuds et appeler votre méthode d'extension pour assurer les propriétés VerticalOffset et ViewportHeight sont à jour.

(réponse copié de commentaire par Dan Auclair qui a conduit à la résolution des problèmes)