2016-10-11 4 views
1

Ich muss ListView auf eine programmatische Weise scrollen. Eigentlich habe ich es teilweise gemacht, aber es funktioniert schnell und es ist anders als normales Verhalten. Wie kann ich normales vertikales Scrolling-Verhalten wie in der Listenansicht implementieren? Ich brauche nur vertikales Scrollen. In meinem Code ist _scrollViewer der ScrollViewer der ListView und drawingPanel ist eine Canvas-Komponente auf der ListView. (Canvas sollte auf dem Listview-Spitze sein, das ist ein reqirement.)ListView Programmatische Scroll in UWP

Durch die Art und Weise meine UI Seite wie folgt aus:

<grid> 
    <listview> 
    </listview> 
    <canvas> 
    </canvas> 
</grid> 

Code auf dieser Seite wie folgt aus:

PointerPoint startPoint;  
     bool pressed = false; 
     private void drawingPanel_PointerPressed(object sender, PointerRoutedEventArgs e) 
     { 
      pressed = true; 
      startPoint = e.GetCurrentPoint(this.drawingPanel);   
     } 
     private void drawingPanel_PointerMoved(object sender, PointerRoutedEventArgs e) 
     {   
      PointerPoint endPoint = e.GetCurrentPoint(this.drawingPanel); 
      PanListViewToNewPosition(startPoint, endPoint); 
     } 
     private void drawingPanel_PointerReleased(object sender, PointerRoutedEventArgs e) 
     { 
      pressed = false;   
      startPoint = null; 
     } 
     private void PanListViewToNewPosition(PointerPoint start, PointerPoint end) 
    { 
     if (pressed) 
     {    
      double verticalOffset = start.Position.Y - end.Position.Y;    
      verticalOffset += this._scrollViewer.VerticalOffset; 
      this._scrollViewer.ChangeView(null, verticalOffset, null); 
     } 
    } 

Antwort

0

Sind Sie sicher, Sie brauchen programmatisches Scrollen?

Es scheint, dass alles, was Sie brauchen, ist, das Canvas Element unsichtbar für den Zeiger (Touch, Maus, etc.), aber immer noch sichtbar für den Benutzer.

Es ist sehr einfach gemacht. Stellen Sie die IsHitTestVisible Eigenschaft auf Canvas-False:

<Canvas IsHitTestVisible="False"> 
... 
</Canvas> 

Wenn auf diese Weise geschieht, wird die Canvas sein auf die ListView, wird aber nicht bewegen - es statisch sein wird. Die ListView scrollt. Wenn Sie die Canvas blättern mit der ListView ‚s Inhalt wollen, setzen beide Elemente auf einem ScrollViewer:

<ScrollViewer> 
    <Grid> 
     <ListView> 
     </ListView> 
     <Canvas IsHitTestVisible="False"> 
     </Canvas> 
    </Grid> 
<ScrollViewer>