2016-10-11 48 views
1

プログラム的な方法でListViewをスクロールする必要があります。実際には、私は部分的に行っていますが、それは迅速に動作し、通常の動作とは異なります。リストビューのような通常の垂直スクロール動作を実装するにはどうすればよいですか?私はちょうど垂直スクロールが必要です。私のコードでは、_scrollViewerはListViewのScrollViewerであり、drawingPanelはListView上のCanvasコンポーネントです。 (キャンバスが、これはreqirementで、リストビューの一番上でなければなりません。)ところでListView UWPでのプログラムスクロール

そのような私のUI側:そのような

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

コードサイド:

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要素をポインタ(タッチ、マウスなど)に見えないようにするだけで、ユーザーには見えるようにすることが必要なようです。

非常に簡単に行われます。 FalseCanvasIsHitTestVisibleプロパティを設定します。

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

この方法を行っている場合、CanvasListViewの上になりますが、スクロールしないだろう - それは、静的になります。 ListViewがスクロールします。あなたはListViewのコンテンツをスクロールするCanvasをしたい場合は、ScrollViewer上の両方の要素を置く:

<ScrollViewer> 
    <Grid> 
     <ListView> 
     </ListView> 
     <Canvas IsHitTestVisible="False"> 
     </Canvas> 
    </Grid> 
<ScrollViewer> 
関連する問題