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
.