У меня есть TreeView с несколькими сотнями листьев, организованных в несколько десятков узлов ... достаточно узлов, чтобы прокручивать их все.
Обычно все работает нормально, но когда развернутые узлы не все умещаются в ScrollViewer, нажатие на узел, чтобы развернуть его, также прокручивает весь TreeView вверх (скрывая только что развернутые листья, пока вы не прокрутите вниз вручную).
Это не та же проблема, что и WPF TreeView с IsVirtualizing = "true" скачет по кругу при смене фокуса и прокрутки , потому что a) я не настраиваю параметры панели стека актуализации; и б) Это .NET 4 (эта ссылка сообщает, что проблема относится только к 3.5).
<DataTemplate x:Key="QuestionTemplate">
<Border BorderBrush="AliceBlue" BorderThickness="1">
<HeaderedContentControl HeaderTemplate="{DynamicResource QuestionHeaderTemplate}"
Header="{Binding NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}" IsTabStop="False" HorizontalAlignment="Left"
IsEnabled="True" />
</Border>
</DataTemplate>
<HierarchicalDataTemplate x:Key="GroupTemplate" ItemsSource="{Binding MyData, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True, Mode=TwoWay}"
ItemTemplate="{StaticResource MyTemplate}">
<Border x:Name="GroupTemplateBorder" BorderBrush="AliceBlue" BorderThickness="1" CornerRadius="10">
<HeaderedContentControl x:Name="GroupTemplateExpander" MinHeight="22" HeaderTemplate="{DynamicResource GroupHeaderTemplate}" Header="{Binding}" IsTabStop="False"
HorizontalAlignment="Left" VerticalContentAlignment="Center" IsEnabled="True" />
</Border>
</HierarchicalDataTemplate>
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<Grid Name="gridPicker" Background="White" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TreeView Name="treeView" MinHeight="20" ItemTemplate="{StaticResource GroupTemplate}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="helper:TreeViewNoSelectBehavior.IsTransparent" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</Grid>
</ScrollViewer>