2012-01-31 71 views
2

可以设置ListBox的偏移量吗?我能找到的所有东西都是滚动到一个元素,但我需要将列表框滚动到任何位置。WP7中的ListBox偏移量

作为替代方案,还有其他组件可以虚拟化它们的项目,并且我可以控制偏移量?

回答

5

你可以得到ListBox的ScrollViewer中,并使用其ScrollToVerticalOffset-method.为了得到ScrollViewer中,比如,你可以挂接到ListBox的加载事件类似如下:

XAML:

<ListBox Loaded="HookScrollViewer"> 

代码 - 背后:

private void HookScrollViewer(object sender, RoutedEventArgs e) 
    { 
     var element = (FrameworkElement)sender; 
     var scrollViewer = ControlHelpers.FindChildOfType<ScrollViewer>(element); 

     if (scrollViewer == null) 
      return; 

     this.myScrollViewer = scrollViewer; 
    } 

的ControlHerlpers.FindChildOfType法是实现这种方式:

public static T FindChildOfType<T>(DependencyObject root) where T : class 
    { 
     var queue = new Queue<DependencyObject>(); 
     queue.Enqueue(root); 

     while (queue.Count > 0) 
     { 
      var current = queue.Dequeue(); 
      for (int i = VisualTreeHelper.GetChildrenCount(current) - 1; 0 <= i; i--) 
      { 
       var child = VisualTreeHelper.GetChild(current, i); 
       var typedChild = child as T; 
       if (typedChild != null) 
       { 
        return typedChild; 
       } 
       queue.Enqueue(child); 
      } 
     } 
     return null; 
    } 

现在您在myScrollViewer成员中拥有ListBox的ScrollViewer,您可以直接访问其方法。例如,滚动底部,你可以拨打:

this.myScrollViewer.ScrollToVerticalOffset(double.MaxValue); 
+0

如果我不设置很多时间确定补偿... – 2012-01-31 12:35:39

+0

喜迈克尔,你可以尽可能帮助我,它工作正常?我在同一页上有两个列表框,并且数据混淆了,如何使用上面的代码获取第二个列表框? – Bohrend 2013-09-20 13:57:11

+0

它的作品非常棒..... – URAndroid 2014-11-24 14:28:12