2010-04-13 5 views
3

Les événements scrolltoVerticalOffset ou scrolltoHorizontalOffset ne modifient pas les valeurs du scrollviewer. Dites-moi à quel événement les valeurs HorizontalOffset et VerticalOffset sont-elles modifiées? J'ai essayé la méthode LayoutUpdated() mais elle va dans une boucle infinie.wpf scrollviewer scrolltoverticaloffset

Merci à l'avance

Répondre

1

En général, les valeurs de HorizontalOffset et VerticalOffset ne sont pas mis à jour, sauf lors de l'événement LayoutUpdated après la ScrollContentPresenter (ou tout autre IScrollInfo) a mis à jour sa valeur et appelée InvalidateScrollInfo(). La seule exception est que DependencyProperty pour chacun d'entre eux est mis à jour pendant le défilement différé (mais étonnamment la propriété CLR correspondante n'est pas mise à jour), mais cela ne s'applique probablement pas dans votre cas.

Il n'y a pas d'événement ScrollToHorizontalOffset ou ScrollToVerticalOffset events in WPF, but there is both a ScrollViewer method and a RoutedCommand of these names. Both the command version and the method version remember your request and execute it at the next LayoutUpdated`, donc si tout ce que vous voulez faire est de vous assurer que le défilement se passe, il suffit d'envoyer la commande ou d'appeler la méthode.

Si vous voulez vérifier que HorizontalOffset ou VerticalOffset a en effet été mis à jour comme vous le souhaitez, vous pouvez simplement prendre le ScrollChangedEvent, ce qui déclenche une fois les valeurs ont été mises à jour, comme ceci:

scrollViewer.ScrollChanged += (obj, e) => 
{ 
    // Get offset information from 'e' or from scrollViewer 
} 

Je ne comprenais pas ce que vous vouliez dire par "J'ai essayé la méthode LayoutUpdated() mais cela va dans une boucle infinie", puisque vous n'avez pas expliqué quelle "méthode LayoutUpdated()" est, mais les informations ci-dessus devraient clarifier l'ordre des événements et vous aider votre chemin vers une solution. Dans tous les cas, toutes les informations dont vous avez besoin pour prendre votre décision doivent être disponibles à partir de l'événement ScrollChanged.

1

J'ai rencontré le même problème, merci de poster la solution. La méthode LayoutUpdated() est appelée par le framework dans une boucle infinie, lorsque vous utilisez ScrollChanged() au lieu de LayoutUpdated(), elle résout le problème.

Questions connexes