WPF TreeView自动滚动到底部?

时间:2011-06-30 18:16:54

标签: c# .net wpf xaml

WPF默认TreeView会自动滚动到节点的底部,因为我们需要显示树视图的顶视图。怎么做?

此外,我无法通过向下看Visual Tree获取滚动查看器。

2 个答案:

答案 0 :(得分:1)

这段代码很粗糙。 让TreeViewItem.BringIntoView()将项目置于顶部的关键是首先将TreeView滚动到底部而不是顶部。 为此,我们需要首先访问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;
}

答案 1 :(得分:0)

预选顶部节点并在选择更改事件上调用TreeViewItem.BringIntoView方法。调用TreeView.ItemContainerGenerator.ContainerFromItem(e.NewValue)来获取TreeViewItem。