Comment obtenir GridView.L'Élément sélectionné la Position de Défilement dans Windows 8 Metro App
-
21-12-2019 - |
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()
La solution
Il y a quelques aspects ici.
- 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 commeawait Task.Delay(100)
- vous pourriez être en mesure de voir lesScrollViewer
décalage de mise à jour.. - 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 nouveauScrollViewer.ChangeView()
méthode qui prend en charge animation de défilement.- Vous avez besoin pour obtenir l'instance de la
ScrollViewer
dans leGridView
modèle premier.Vous pouvez soit le faire à l'aide deGetTemplatePart()
ou avec leVisualTreeHelper
. - Maintenant, vous avez besoin pour obtenir la position de l'INTERFACE utilisateur contenant de l'
SelectedItem
dans leScrollViewer
.Pour ce faire il vous faudra d'abord le conteneur lui-même, que vous pouvez obtenir de l'aidevar container = gv.ContainerFromItem(gv.SelectedItem)
, mais si l'ItemsPanel
de laGridView
est virtualisé - vous pourriez ne pas être en mesure de le faire parce que laSelectedItem
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 laSelectedItem
dans la collection d'éléments et la taille de l'article, mais il pourrait être un peu compliqué. - 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;
- À ce stade, vous devriez être en mesure de faire défiler jusqu'à l'offset à l'aide de la méthode que vous souhaitez.
- Vous avez besoin pour obtenir l'instance de la
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow