From 2ac10d0f7d81ad839fbab202880635dca7b5348c Mon Sep 17 00:00:00 2001 From: Compunet <117437050+dme-compunet@users.noreply.github.com> Date: Mon, 9 Feb 2026 17:23:15 +0200 Subject: [PATCH] Prevent ScrollBar collapsing during active thumb drag (#20563) --- src/Avalonia.Controls/Primitives/ScrollBar.cs | 17 ++++++++++++++++- .../Primitives/ScrollBarTests.cs | 3 ++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Primitives/ScrollBar.cs b/src/Avalonia.Controls/Primitives/ScrollBar.cs index 7df7012f8f..89dcb9a8d4 100644 --- a/src/Avalonia.Controls/Primitives/ScrollBar.cs +++ b/src/Avalonia.Controls/Primitives/ScrollBar.cs @@ -85,6 +85,7 @@ namespace Avalonia.Controls.Primitives private bool _isExpanded; private CompositeDisposable? _ownerSubscriptions; private ScrollViewer? _owner; + private bool _isDragging; /// /// Initializes static members of the class. @@ -92,6 +93,7 @@ namespace Avalonia.Controls.Primitives static ScrollBar() { Thumb.DragDeltaEvent.AddClassHandler((x, e) => x.OnThumbDragDelta(e), RoutingStrategies.Bubble); + Thumb.DragStartedEvent.AddClassHandler((x, e) => x.OnThumbDragStart(e), RoutingStrategies.Bubble); Thumb.DragCompletedEvent.AddClassHandler((x, e) => x.OnThumbDragComplete(e), RoutingStrategies.Bubble); FocusableProperty.OverrideMetadata(new(false)); @@ -325,7 +327,7 @@ namespace Avalonia.Controls.Primitives { base.OnPointerExited(e); - if (AllowAutoHide) + if (AllowAutoHide && !_isDragging) { CollapseAfterDelay(); } @@ -491,8 +493,21 @@ namespace Avalonia.Controls.Primitives { OnScroll(ScrollEventType.ThumbTrack); } + + private void OnThumbDragStart(VectorEventArgs e) + { + _isDragging = true; + } + private void OnThumbDragComplete(VectorEventArgs e) { + _isDragging = false; + + if (AllowAutoHide && !IsPointerOver) + { + CollapseAfterDelay(); + } + OnScroll(ScrollEventType.EndScroll); } diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs index 49fda57092..8ec007c203 100644 --- a/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs @@ -4,11 +4,12 @@ using Avalonia.Controls.Primitives; using Avalonia.Controls.Templates; using Avalonia.Input; using Avalonia.Media; +using Avalonia.UnitTests; using Xunit; namespace Avalonia.Controls.UnitTests.Primitives { - public class ScrollBarTests + public class ScrollBarTests : ScopedTestBase { [Fact] public void Setting_Value_Should_Update_Track_Value()