Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF TreeView是否自动滚动到底部?_C#_.net_Wpf_Xaml - Fatal编程技术网

C# WPF TreeView是否自动滚动到底部?

C# WPF TreeView是否自动滚动到底部?,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,WPF默认树视图会自动滚动到节点的底部,因为我们需要显示树视图的顶部视图。怎么做 此外,我无法通过遍历可视化树来获取滚动查看器。预选顶部节点,并在选择更改事件上调用treevieItem.BringIntoView方法。调用TreeView.ItemContainerGenerator.ContainerFromItem(e.NewValue)来获取TreeViewItem。这段代码非常粗糙。 获取TreeViewItem.BringIntoView()的关键是首先将TreeView滚动到底部,

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


此外,我无法通过遍历可视化树来获取滚动查看器。

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

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

在本例中,您的项目控件应该是您试图到达顶部的树视图项。 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;
}
item.IsSelected=true;
ScrollViewer scroller=(ScrollViewer)this.FindVisualChildElement(this.uxTree,typeof(ScrollViewer));
scroller.ScrollToBottom();
item.BringIntoView();
私有FrameworkElement FindVisualChildElement(DependencyObject元素,类型childType)
{
int count=VisualTreeHelper.GetChildrenCount(元素);
for(int i=0;i