Come ottenere GridView. La posizione di scorrimento dell'elemento selezionata in Windows 8 Metro App
-
21-12-2019 - |
Domanda
Sto selezionando GridView elemento usando il codice, quindi ho anche bisogno della mia GridView per scorrere la posizione dell'articolo selezionato, ho provato GRIDView.ScrollINTOPOSIZIONE () ma non funziona. C'è un modo per ottenere la posizione Rotolo di SelectedItem in modo da poterlo scorrere usando ScrollViewer1.scrolltohorizontalooffsetwithanimation ()
Soluzione
Ci sono alcuni aspetti qui.
- .
- Penso che solo
gridView.ScrollIntoView(gridView.SelectedItem)
dovrebbe funzionare. È un po 'asincrono, quindi il codice non lo vedeva immediatamente scorrere, ma se fai qualcosa comeawait Task.Delay(100)
: potresti essere in grado di vedere l'offsetScrollViewer
aggiornato .. - Se si desidera un rotolo animato - è possibile utilizzare l'estensione
ScrollViewer.ScrollToHorizontalOffsetWithAnimation()
Gcode di WinRT XAML Toolkit o se si rivolge a Windows 8.1 - è possibile utilizzare il nuovo metodoScrollViewer.ChangeView()
che supporta lo scorrimento animato.- .
- È necessario ottenere prima l'istanza del
ScrollViewer
nel modelloGridView
. Puoi farlo usandoGetTemplatePart()
o con ilVisualTreeHelper
.
- È necessario ottenere prima l'istanza del
- Ora è necessario ottenere la posizione del contenitore UI del
SelectedItem
nelScrollViewer
. Per fare ciò che è necessario per la prima volta il contenitore stesso, il che è possibile utilizzarevar container = gv.ContainerFromItem(gv.SelectedItem)
, ma se ilItemsPanel
delGridView
è virtualizzato - potresti non essere in grado di farlo perché ilSelectedItem
potrebbe non avere il suo contenitore UI. Avrei semplicemente il rotolo non animato in tal caso per molte ragioni - principalmente prestazioni, ma se devi davvero - potresti essere in grado di calcolare la posizione in base all'indice delSelectedItem
nella raccolta di elementi e dimensioni dell'oggetto, Ma potrebbe essere un po 'complicato. - Una volta ottenuto il contenitore puoi ottenere la sua posizione con qualcosa come
var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
- A questo punto dovresti essere in grado di scorrere fino all'offset usando il metodo che ti piace.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow