Inside the TreeView there is a ScrollViewer.

Done in some way without specifying the <ScrollViewer>

How to find a ScrollViewer inside a TreeView to manage its properties?

 var scrollViewer = tree.Template.FindName("_tv_scrollviewer_", tree) as ScrollViewer; scrollViewer.ScrollToVerticalOffset(20); 

By name _tv_scrollviewer_ "does not find (scrollViewer = null)

xaml

 <Grid > <TreeView x:Name="tree" > <TreeView.Resources> </TreeView.Resources> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}" > <Style.Resources> </Style.Resources> </Style> </TreeView.ItemContainerStyle> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding data1, ConverterParameter=Name1, Converter={StaticResource MyConverter}}"> <StackPanel> <TextBlock > </TextBlock> </StackPanel> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> 

  • It works fine for me var scrollViewer = tree.Template.FindName("_tv_scrollviewer_", tree) as ScrollViewer; The main thing to run after the event Loaded - Andrey NOP

1 answer 1

This solved the problem.

 AddHandler(FrameworkElement.LoadedEvent, new RoutedEventHandler(ControlIsLoaded)); private void ControlIsLoaded(object sender, RoutedEventArgs e) { var childCount = VisualTreeHelper.GetChildrenCount(this.tree); for (int i = 0; i < childCount; i++) { var child = VisualTreeHelper.GetChild(this.tree, i); if (child.GetValue(NameProperty).ToString() == "Bd") { var child_Count = VisualTreeHelper.GetChildrenCount(child); for (int ii = 0; ii < child_Count; ii++) { var child_ = VisualTreeHelper.GetChild(child, i); if (child_.GetValue(NameProperty).ToString() == "_tv_scrollviewer_") { var vScrollViewer = (ScrollViewer)child_; } } } } 

}