2012-01-31 67 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