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 ()

È stato utile?

Soluzione

Ci sono alcuni aspetti qui.

    .
  1. Penso che solo gridView.ScrollIntoView(gridView.SelectedItem) dovrebbe funzionare. È un po 'asincrono, quindi il codice non lo vedeva immediatamente scorrere, ma se fai qualcosa come await Task.Delay(100): potresti essere in grado di vedere l'offset ScrollViewer aggiornato ..
  2. 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 metodo ScrollViewer.ChangeView() che supporta lo scorrimento animato.
      .
    1. È necessario ottenere prima l'istanza del ScrollViewer nel modello GridView. Puoi farlo usando GetTemplatePart() o con il VisualTreeHelper.
    2. Ora è necessario ottenere la posizione del contenitore UI del SelectedItem nel ScrollViewer. Per fare ciò che è necessario per la prima volta il contenitore stesso, il che è possibile utilizzare var container = gv.ContainerFromItem(gv.SelectedItem), ma se il ItemsPanel del GridView è virtualizzato - potresti non essere in grado di farlo perché il SelectedItem 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 del SelectedItem nella raccolta di elementi e dimensioni dell'oggetto, Ma potrebbe essere un po 'complicato.
    3. Una volta ottenuto il contenitore puoi ottenere la sua posizione con qualcosa come var horizontalOffset = gridViewItem.TransformToVisual(scrollViewer).TransformPoint(new Point()).X;
    4. 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
scroll top