J'ai un DataGrid avec de nombreux éléments et j'ai besoin de faire défiler par programme le SelectedItem
. J'ai cherché sur Google et StackOverflow, et il semble que la solution est ScrollIntoView, comme suit:Faites défiler le contrôle DataGrid WPF pour afficher l'élément sélectionné au-dessus
grid.ScrollIntoView(grid.SelectedItem)
qui fait défiler la DataGrid vers le haut ou vers le bas jusqu'à ce que l'élément sélectionné est mis au point. Toutefois, en fonction de la position de défilement actuelle par rapport à l'élément sélectionné, l'élément sélectionné peut être le dernier élément visible dans le ScrollViewer du DataGrid. Je veux que l'élément sélectionné soit le premier élément visible dans ScrollViewer (en supposant qu'il y ait suffisamment de lignes dans le DataGrid pour permettre cela). J'ai donc essayé ceci:
'FindVisualChild is a custom extension method that searches in the visual tree and returns
'the first element of the specified type
Dim sv = grid.FindVisualChild(Of ScrollViewer)
If sv IsNot Nothing Then sv.ScrollToEnd()
grid.ScrollIntoView(grid.SelectedItem)
D'abord, je faites défiler jusqu'à la fin de la DataGrid et seulement alors que je fais défiler la SelectedItem, à quel point le SelectedItem est affiché en haut de la grille de données.
Mon problème est que le défilement jusqu'à la fin du DataGrid fonctionne bien, mais le défilement subséquent vers l'élément sélectionné ne fonctionne pas toujours.
Comment puis-je résoudre ce problème ou existe-t-il d'autres stratégies pour faire défiler vers un enregistrement spécifique dans la première position?