Comment détecter le début du défilement dans ListView sous Windows 10 UWP?

Je souhaite m’abonner à un événement qui m’indique que le défilement a commencé dans un ListView et indique le sens du défilement.

Est-il possible de le faire dans Windows 10 UWP API?

Merci

Vous devez d’abord obtenir le ScrollViewer dans ListView , puis vous abonner à son événement DirectManipulationStarted .

Cependant, obtenir le sens du défilement peut être délicat. Je vous ScrollViewer consulter la nouvelle API de composition Windows, où il existe un moyen d’utiliser ExpressionAnimation pour lier la ScrollViewer de ScrollViewer à une valeur de votre choix.

Pour commencer, jetez un coup d’œil à cette démo de James Clarke.

 private void MainPage_Loaded(object sender, RoutedEventArgs e) { CompositionPropertySet scrollerViewerManipulation = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(myScroller); Compositor compositor = scrollerViewerManipulation.Compositor; ExpressionAnimation expression = compositor.CreateExpressionAnimation("ScrollManipululation.Translation.Y * ParallaxMultiplier"); expression.SetScalarParameter("ParallaxMultiplier", 0.3f); expression.SetReferenceParameter("ScrollManipululation", scrollerViewerManipulation); Visual textVisual = ElementCompositionPreview.GetElementVisual(background); textVisual.StartAnimation("Offset.Y", expression); } 

Mettre à jour

En fait, je viens de penser à un moyen plus simple de détecter la direction de défilement. Il suffit de s’abonner chaque fois que le VerticalOffset est modifié et de le comparer à ses valeurs précédentes.

 private double _previousOffset; sv.RegisterPropertyChangedCallback(ScrollViewer.VerticalOffsetProperty, (s, dp) => { if (Math.Abs(sv.VerticalOffset - _previousOffset ) < 3) { // ignore when offset difference is too small } else if (sv.VerticalOffset > _previousOffset) { Debug.WriteLine($"up {sv.VerticalOffset - _previousOffset}"); } else { Debug.WriteLine($"down {sv.VerticalOffset - _previousOffset}"); } _previousOffset = sv.VerticalOffset; });