2011-01-20 15 views
2

各ピボットアイテムにスクロールビューアが含まれているピボットがあります。 私がしたいことは、新しいピボット項目にスクロールするたびにスクロールビューアのオフセットを特定の数値に設定することです。オフセット値が公開されていないため、データバインディングを作成できません。スクロールビューアがデータテンプレート(wp7)内にあるときのスクロールビューアの垂直オフセットの設定

私は呼び出すことができるScrollToVerticalOffset()がありますが、現在アクティブなスクロールビューワを見つけて、そのオブジェクトを取得する必要があります。つまり、現在選択されているピボットアイテム内のスクロールビューアを意味します。

名前に基づいてビジュアルツリーを走査してスクロールビューアーを取得しようとしましたが、常にスクロールビューアーを取得します。

どうすればいいですか?

ありがとう

答えて

3

あなたはタイプによって代わりの名前でビジュアルツリーをトラバースし、あなたが見つける最初のScrollViewerのは、あなたが望むものになることを意味する必要があり、選択PivotItem、で始めることができます。

 /// <summary> 
     /// Gets the visual children of type T. 
     /// </summary> 
     /// <typeparam name="T"></typeparam> 
     /// <param name="target"></param> 
     /// <returns></returns> 
     public static IEnumerable<T> GetVisualChildren<T>(this DependencyObject target) 
      where T : DependencyObject 
     { 
      return GetVisualChildren(target).Where(child => child is T).Cast<T>(); 
     } 


     /// <summary> 
     /// Get the visual tree children of an element. 
     /// </summary> 
     /// <param name="element">The element.</param> 
     /// <returns>The visual tree children of an element.</returns> 
     /// <exception cref="T:System.ArgumentNullException"> 
     /// <paramref name="element"/> is null. 
     /// </exception> 
     public static IEnumerable<DependencyObject> GetVisualChildren(this DependencyObject element) 
     { 
      if (element == null) 
      { 
       throw new ArgumentNullException("element"); 
      } 

      return GetVisualChildrenAndSelfIterator(element).Skip(1); 
     } 

     /// <summary> 
     /// Get the visual tree children of an element and the element itself. 
     /// </summary> 
     /// <param name="element">The element.</param> 
     /// <returns> 
     /// The visual tree children of an element and the element itself. 
     /// </returns> 
     private static IEnumerable<DependencyObject> GetVisualChildrenAndSelfIterator(this DependencyObject element) 
     { 
      Debug.Assert(element != null, "element should not be null!"); 

      yield return element; 

      int count = VisualTreeHelper.GetChildrenCount(element); 
      for (int i = 0; i < count; i++) 
      { 
       yield return VisualTreeHelper.GetChild(element, i); 
      } 
     }

ですから、このようなもので終わるだろう:それは助け、

var scroller = ((PivotItem)pivot.SelectedItem).GetVisualChildren().FirstOrDefault(); 
scroller.ScrollToVerticalOffset(offset);
+0

ありがとうのデレク – johnX99

関連する問題