2009-06-17 25 views

Trả lời

27

Có, bạn sẽ phải lấy ScrollViwer từ ListView, hoặc khi bạn có quyền truy cập vào đó, bạn có thể sử dụng các phương pháp được hiển thị bởi nó hoặc ghi đè cuộn. Bạn cũng có thể cuộn bằng cách lấy vùng nội dung chính và sử dụng nó trong giao diện IScrollInfo.

Dưới đây là một chút trợ giúp để có được những thành phần ScrollViwer của một cái gì đó giống như một ListBox, ListView vv

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

Và sau đó bạn chỉ có thể sử dụng .LineUp() và .LineDown() như thế này:

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> 

Cuộn logic được tiếp xúc bởi LineUp và LineDown vẫn cuộn theo mục, nếu bạn muốn cuộn theo số lượng đã đặt, bạn nên sử dụng ScrollToHorizontal/VerticalOffset mà tôi đã sử dụng ở trên. Nếu bạn muốn một số cuộn phức tạp hơn nữa, sau đó hãy xem câu trả lời tôi đã cung cấp trong số other question này.

+2

Đối với cả cuộn xuống dọc và lên, bạn sẽ thêm 3 đến 'VerticalOffset'. Nó có đúng không? Đối với lên, chúng ta cần trừ 3, thay vì thêm. – Syed

3

Bạn đã thử ScrollIntoView chưa? Hoặc, nếu nó không phải là một mục cụ thể mà bạn đưa vào xem, nhưng bù đắp từ vị trí hiện tại, bạn có thể sử dụng BringIntoView.

+0

Cảm ơn không, chưa từng thấy. –

Các vấn đề liên quan