2009-06-17 13 views

答えて

27

はい、ListViewからScrollViwerを取得する必要があります。ただし、一度アクセスできれば、そのメソッドを使用するか、スクロールをオーバーライドできます。メインコンテンツエリアを取得し、IScrollInfoインターフェイスの実装を使用することで、スクロールすることもできます。ここで

は、リストボックス、リストビューのようなもののScrollViwerコンポーネントを取得するには少しヘルパーなど

public static DependencyObject GetScrollViewer(DependencyObject o) 
{ 
    // Return the DependencyObject if it is a ScrollViewer 
    if (o is ScrollViewer) 
    { return o; } 

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++) 
    { 
     var child = VisualTreeHelper.GetChild(o, i); 

     var result = GetScrollViewer(child); 
     if (result == null) 
     { 
      continue; 
     } 
     else 
     { 
      return result; 
     } 
    } 
    return null; 
} 

です。そして、あなたは、単に使用することができます.LineUp()と、このような.LineDown():

private void OnScrollUp(object sender, RoutedEventArgs e) 
{ 
    var scrollViwer = GetScrollViewer(uiListView) as ScrollViewer; 

    if (scrollViwer != null) 
    { 
     // Logical Scrolling by Item 
     // scrollViwer.LineUp(); 
     // Physical Scrolling by Offset 
     scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + 3); 
    } 
} 

private void OnScrollDown(object sender, RoutedEventArgs e) 
{ 
    var scrollViwer = GetScrollViewer(uiListView) as ScrollViewer; 

    if (scrollViwer != null) 
    { 
     // Logical Scrolling by Item 
     // scrollViwer.LineDown(); 
     // Physical Scrolling by Offset 
     scrollViwer.ScrollToVerticalOffset(scrollViwer.VerticalOffset + 3); 
    } 
} 


<DockPanel> 
    <Button DockPanel.Dock="Top" 
      Content="Scroll Up" 
      Click="OnScrollUp" /> 
    <Button DockPanel.Dock="Bottom" 
      Content="Scroll Down" 
      Click="OnScrollDown" /> 
    <ListView x:Name="uiListView"> 
     <!-- Content --> 
    </ListView> 
</DockPanel> 

LineUpとLineDownで公開されている論理スクロールは、上記で使用したScrollToHorizo​​ntal/VerticalOffsetを使用する必要がある場合は、項目ごとにスクロールします。さらに複雑なスクロールをしたい場合は、other questionの回答を見てください。

+2

垂直スクロールダウンとアップの両方で、 'VerticalOffset'に3を追加しています。それが正しいか?上には、addの代わりにsubtract 3が必要です。 – Syed

3

ScrollIntoViewを試しましたか? また、閲覧した特定のアイテムではなく、現在の位置からのオフセットであれば、BringIntoViewを使用できます。

+0

ありがとうございました、それらを見たことがありません。 –

関連する問題