2011-06-30 45 views
0

WPFデフォルトのTreeViewは、ツリービューのトップビューを表示する必要がある場合、ノードの下部まで自動的にスクロールされます。どうやってするか?WPF TreeViewは自動的に下にスクロールされますか?

また、ビジュアルツリーを歩いてスクロールビューアを取得できませんでした。

答えて

0

トップノードを事前に選択し、選択変更イベントでTreeViewItem.BringIntoViewメソッドを呼び出します。 TreeViewItemを保持するには、TreeView.ItemContainerGenerator.ContainerFromItem(e.NewValue)を呼び出します。

1

このコードは非常に粗いです。 TreeViewItem.BringIntoView()を取得して上部にアイテムを取得するためのキーは、最初にTreeViewを上部ではなく下部にスクロールすることです。 これを行うには、まずツリービューのコントロールテンプレート内のScrollViewerにアクセスする必要があります。 IMOをめちゃくちゃにすることは、当初からフレームワークで提供されていたはずです。

この場合のアイテムコントロールは、上に到達しようとしているTreeViewItemである必要があります。 uxTreeコントロールはTreeViewです。

item.IsSelected = true; 
ScrollViewer scroller = (ScrollViewer)this.FindVisualChildElement(this.uxTree, typeof(ScrollViewer)); 
scroller.ScrollToBottom(); 
item.BringIntoView(); 

private FrameworkElement FindVisualChildElement(DependencyObject element, Type childType) 
{ 
    int count = VisualTreeHelper.GetChildrenCount(element); 

    for (int i = 0; i < count; i++) 
    { 
     var dependencyObject = VisualTreeHelper.GetChild(element, i); 
     var fe = (FrameworkElement)dependencyObject; 

     if (fe.GetType() == childType) 
     { 
      return fe; 
     } 

     FrameworkElement ret = null; 

     if (fe.GetType().Equals(typeof(ScrollViewer))) 
     { 
      ret = FindVisualChildElement((fe as ScrollViewer).Content as FrameworkElement, childType); 
     } 
     else 
     { 
      ret = FindVisualChildElement(fe, childType); 
     } 

     if (ret != null) 
     { 
      return ret; 
     } 
    } 

    return null; 
} 
関連する問題