2009-09-01 4 views
1

Je travaillais avec ScrollViewer et j'ai remarqué que lors de l'appel ScrollToHorizontalOffset ou ScrollToVerticalOffset cela semble avoir un effet retardé en soulevant l'événement ScrollChanged. J'ai également remarqué que les propriétés HorizontalOffset/VerticalOffset n'ont pas immédiatement la valeur qui vient d'être définie. Après un petit laps de temps, l'événement ScrollChanged est déclenché et les propriétés ont les bonnes valeurs.Pourquoi l'événement ScrollViewer ScrollChanged n'est-il levé qu'après un petit délai suite à un appel à ScrollToVerticalOffset/ScrollToHorizontalOffset?

Quelqu'un connaît-il la raison de cet effet retardé? Pourquoi ne met-elle pas à jour immédiatement? Y at-il de toute façon pour le forcer à mettre à jour immédiatement?

Répondre

3

La raison de cet effet retardé réside dans ScrollViewer lui-même. Chaque fois que vous appelez ScrollToHorizontalOffset(), il ajoute votre requête dans la file d'attente de traitement interne, qui est traitée dans l'événement LayoutUpdated. Pour déclencher cet événement, ScrollViewer invalide l'organisation des contrôles internes. Ce n'est qu'une fois que l'arrangement est terminé (ArangeOverride() est traité dans l'arbre visuel), il soulève l'événement ScrollChanged.

En réponse à votre dernière question: "Y a-t-il un moyen de forcer la mise à jour immédiate?", Je ne peux que vous conseiller de vous assurer que le contenu de votre ScrollViewer est le plus rapide possible. Je ne peux pas penser autrement, ce qui pourrait être plus facile que celui-ci ...

Peut-être que si vous pouviez dire pourquoi avez-vous besoin que cet événement se produise immédiatement, nous pouvons suggérer quelque chose de mieux que cette réponse :)?

+0

Merci pour votre réponse. Je n'ai pas vraiment besoin de le déclencher immédiatement et ce n'était pas vraiment un problème, j'étais juste curieux de savoir pourquoi ça fonctionne comme ça. –

Questions connexes