Browse Source

Prevent ScrollBar collapsing during active thumb drag (#20563)

release/latest
Compunet 1 month ago
committed by Julien Lebosquain
parent
commit
2ac10d0f7d
No known key found for this signature in database GPG Key ID: 1833CAD10ACC46FD
  1. 17
      src/Avalonia.Controls/Primitives/ScrollBar.cs
  2. 3
      tests/Avalonia.Controls.UnitTests/Primitives/ScrollBarTests.cs

17
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;
/// <summary>
/// Initializes static members of the <see cref="ScrollBar"/> class.
@ -92,6 +93,7 @@ namespace Avalonia.Controls.Primitives
static ScrollBar()
{
Thumb.DragDeltaEvent.AddClassHandler<ScrollBar>((x, e) => x.OnThumbDragDelta(e), RoutingStrategies.Bubble);
Thumb.DragStartedEvent.AddClassHandler<ScrollBar>((x, e) => x.OnThumbDragStart(e), RoutingStrategies.Bubble);
Thumb.DragCompletedEvent.AddClassHandler<ScrollBar>((x, e) => x.OnThumbDragComplete(e), RoutingStrategies.Bubble);
FocusableProperty.OverrideMetadata<ScrollBar>(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);
}

3
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()

Loading…
Cancel
Save