|
|
@@ -84,6 +84,11 @@ namespace Avalonia.Controls
|
|
|
/// <summary>
|
|
|
/// Gets or sets a value indicating whether to automatically scroll to newly selected items.
|
|
|
/// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// This property is of limited use with <see cref="TreeView"/> as it will only scroll
|
|
|
+ /// to realized items. To scroll to a non-expanded item, you need to ensure that its
|
|
|
+ /// ancestors are expanded.
|
|
|
+ /// </remarks>
|
|
|
public bool AutoScrollToSelectedItem
|
|
|
{
|
|
|
get => GetValue(AutoScrollToSelectedItemProperty);
|
|
|
@@ -353,9 +358,13 @@ namespace Avalonia.Controls
|
|
|
|
|
|
SelectedItemsAdded(e.NewItems!.Cast<object>().ToArray());
|
|
|
|
|
|
- if (AutoScrollToSelectedItem)
|
|
|
+ var selectedItem = SelectedItem;
|
|
|
+
|
|
|
+ if (AutoScrollToSelectedItem &&
|
|
|
+ selectedItem is not null &&
|
|
|
+ e.NewItems![0] == selectedItem)
|
|
|
{
|
|
|
- var container = ContainerFromItem(e.NewItems![0]!);
|
|
|
+ var container = TreeContainerFromItem(selectedItem);
|
|
|
|
|
|
container?.BringIntoView();
|
|
|
}
|
|
|
@@ -531,6 +540,12 @@ namespace Avalonia.Controls
|
|
|
// The IsSelected property is not set on the container: update the container
|
|
|
// selection based on the current selection as understood by this control.
|
|
|
MarkContainerSelected(container, SelectedItems.Contains(item));
|
|
|
+
|
|
|
+ // If the newly realized container is the selected container, scroll to it after layout.
|
|
|
+ if (AutoScrollToSelectedItem && SelectedItem == item)
|
|
|
+ {
|
|
|
+ Dispatcher.UIThread.Post(container.BringIntoView, DispatcherPriority.Loaded);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <inheritdoc/>
|