Этот код очень грубый.Ключом к получению TreeViewItem.BringIntoView (), чтобы получить элемент наверх, является сначала прокрутка TreeView вниз, а не вверх.Для этого нам сначала нужно получить доступ к ScrollViewer внутри шаблона элемента управления TreeView.Много беспорядка вокруг 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;
}