2010-11-09 20 views
9

Estoy tratando de encontrar la forma de hacer algo que (debería) ser bastante simple.WPF ListBox OnScroll Evento

Lo que quiero es hacer que un evento se active siempre que se desplaza un control ListBox. ListBox se crea dinámicamente, por lo que necesito una forma de hacerlo desde el código subyacente (sin embargo, también se aprecian las soluciones XAML, ya que me da algo para empezar).

Gracias de antemano por cualquier idea.

Respuesta

11

en XAML puede acceder al ScrollViewer y añadir eventos como éste

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

actualización
Esta es probablly lo que necesita en código detrás

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

Con una implementación de 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

Muy buena respuesta. No he tenido tiempo de implementarlo para ver si hace todo correctamente, pero seguro que suena bien. Gracias por tu ayuda. – riwalk