Question

Je suis en sélectionnant gridview élément à l'aide de code, donc j'ai aussi besoin de mon gridview à Rouleaux à l'élément sélectionné de la position , j'ai essayé GridView.ScrollintoPosition() mais ça ne fonctionne pas .EST-il possible d'obtenir le La position de défilement de SelectedItem afin que je puisse la faire défiler à l'aide de scrollViewer1.ScrollToHorizontalOffsetWithAnimation()

Était-ce utile?

La solution

Il y a quelques aspects ici.

  1. Je pense juste gridView.ScrollIntoView(gridView.SelectedItem) devrait fonctionner.C'est un peu asynchrone, de sorte que le code ne serait pas immédiatement voir défiler, mais si vous faites quelque chose comme await Task.Delay(100) - vous pourriez être en mesure de voir les ScrollViewer décalage de mise à jour..
  2. Si vous souhaitez une animation de défilement, vous pouvez utiliser XAML Trousse à outils ScrollViewer.ScrollToHorizontalOffsetWithAnimation() extension ou si vous utilisez Windows 8.1 - vous pouvez utiliser le nouveau ScrollViewer.ChangeView() méthode qui prend en charge animation de défilement.
    1. Vous avez besoin pour obtenir l'instance de la ScrollViewer dans le GridView modèle premier.Vous pouvez soit le faire à l'aide de GetTemplatePart() ou avec le VisualTreeHelper.
    2. Maintenant, vous avez besoin pour obtenir la position de l'INTERFACE utilisateur contenant de l' SelectedItem dans le ScrollViewer.Pour ce faire il vous faudra d'abord le conteneur lui-même, que vous pouvez obtenir de l'aide var container = gv.ContainerFromItem(gv.SelectedItem), mais si l' ItemsPanel de la GridView est virtualisé - vous pourriez ne pas être en mesure de le faire parce que la SelectedItem peut ne pas avoir de son INTERFACE utilisateur du conteneur.Je voudrais simplement faire de la non-animés de défilement dans ce cas pour de nombreuses raisons, principalement la performance, mais si vous avez vraiment de), vous pourriez être en mesure de calculer la position en fonction de l'indice de la SelectedItem dans la collection d'éléments et la taille de l'article, mais il pourrait être un peu compliqué.
    3. Une fois que vous obtenez le conteneur, vous pouvez obtenir sa position avec quelque chose comme var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
    4. À ce stade, vous devriez être en mesure de faire défiler jusqu'à l'offset à l'aide de la méthode que vous souhaitez.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top