2010-11-09 60 views
9

Tôi đang cố gắng tìm ra cách để làm điều gì đó (nên) khá đơn giản.WPF ListBox OnScroll Sự kiện

Điều tôi muốn là có sự kiện kích hoạt bất cứ khi nào điều khiển ListBox được cuộn. ListBox được tạo động, vì vậy tôi cần một cách để làm điều đó từ mã phía sau (tuy nhiên các giải pháp XAML được đánh giá là tốt, vì nó mang lại cho tôi một cái gì đó để bắt đầu từ).

Cảm ơn trước vì bất kỳ ý tưởng nào.

Trả lời

11

Trong XAML bạn có thể truy cập vào ScrollViewer và thêm các sự kiện như thế này

<ListBox Name="listBox" 
     ScrollViewer.ScrollChanged="listBox_ScrollChanged" 

Cập nhật
Đây là probablly những gì bạn cần trong Mã đằng sau

List<ScrollBar> scrollBarList = GetVisualChildCollection<ScrollBar>(listBox); 
foreach (ScrollBar scrollBar in scrollBarList) 
{ 
    if (scrollBar.Orientation == Orientation.Horizontal) 
    { 
     scrollBar.ValueChanged += new RoutedPropertyChangedEventHandler<double>(listBox_HorizontalScrollBar_ValueChanged); 
    } 
    else 
    { 
     scrollBar.ValueChanged += new RoutedPropertyChangedEventHandler<double>(listBox_VerticalScrollBar_ValueChanged); 
    } 
} 

Với một thực hiện GetVisualChildCollection

public static List<T> GetVisualChildCollection<T>(object parent) where T : Visual 
{ 
    List<T> visualCollection = new List<T>(); 
    GetVisualChildCollection(parent as DependencyObject, visualCollection); 
    return visualCollection; 
} 
private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : Visual 
{ 
    int count = VisualTreeHelper.GetChildrenCount(parent); 
    for (int i = 0; i < count; i++) 
    { 
     DependencyObject child = VisualTreeHelper.GetChild(parent, i); 
     if (child is T) 
     { 
      visualCollection.Add(child as T); 
     } 
     else if (child != null) 
     { 
      GetVisualChildCollection(child, visualCollection); 
     } 
    } 
} 
+0

Câu trả lời rất hay. Tôi đã không có thời gian để thực hiện nó để xem nếu nó làm mọi thứ một cách chính xác, nhưng nó chắc chắn âm thanh đúng. Cảm ơn sự giúp đỡ của bạn. – riwalk

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