2016-10-11 4 views
1

Мне нужно прокручивать ListView программным способом. На самом деле, я сделал частично, но он работает быстро и отличается от обычного поведения. Как я могу реализовать как обычное поведение вертикальной прокрутки listview? Мне нужна только вертикальная прокрутка. В моем коде _scrollViewer - ScrollViewer из ListView, а drawingPanel - компонент Canvas, который находится в ListView. (Холст должен быть сверху на ListView, это reqirement.)ListView Programatic Scroll в UWP

Кстати моя сторона UI так:

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

код Side как это:

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); 
     } 
    } 

ответ

0

Вы уверены, вам нужна программная прокрутка?

Кажется, что все, что вам нужно, это сделать элемент Canvas невидимым для указателя (сенсорный, мышь и т. Д.), Но все еще видимый для пользователя.

Все делается очень просто. Установите IsHitTestVisible свойство на Canvas в False:

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

Если сделать так, то Canvas будет на вершине ListView, но не будет прокручиваться - это будет статичной. Прокрутится список ListView. Если вы хотите Canvas прокручивать с содержанием ListView «s, положил оба элемента на ScrollViewer:

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