WPF树视图是否自动滚动到底

本文关键字:滚动 视图 是否 WPF | 更新日期: 2023-09-27 18:00:53

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

此外,我也无法通过走下视觉树来获得滚动查看器。

WPF树视图是否自动滚动到底

预先选择顶部节点并调用TreeViewItem。对所选更改的事件执行BringIntoView方法。调用TreeView。ItemContainerGenerator。ContainerFromItem(e.NewValue(以获取TreeViewItem。

这段代码非常粗糙。获取TreeViewItem的关键。BringIntoView((将一个项目滚动到顶部,首先将TreeView滚动到底部而不是顶部。为此,我们需要首先访问TreeView控件模板中的ScrollViewer。海事组织的许多混乱,从一开始就应该在框架中提供。

在这种情况下,您的项目控件应该是您试图到达顶部的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;
}