Browse Source

Merge pull request #8498 from timunie/fix/ProgressBarShouldListenToTrackSize

fix for ProgressBar not listening to size changes of parent track
Max Katz 3 years ago
parent
commit
1a076162fe
1 changed files with 10 additions and 1 deletions
  1. 10 1
      src/Avalonia.Controls/ProgressBar.cs

+ 10 - 1
src/Avalonia.Controls/ProgressBar.cs

@@ -100,6 +100,7 @@ namespace Avalonia.Controls
         private double _indeterminateStartingOffset;
         private double _indeterminateEndingOffset;
         private Border? _indicator;
+        private IDisposable? _trackSizeChangedListener;
 
         public static readonly StyledProperty<bool> IsIndeterminateProperty =
             AvaloniaProperty.Register<ProgressBar, bool>(nameof(IsIndeterminate));
@@ -195,8 +196,9 @@ namespace Avalonia.Controls
         /// <inheritdoc/>
         protected override Size ArrangeOverride(Size finalSize)
         {
+            var result = base.ArrangeOverride(finalSize);
             UpdateIndicator();
-            return base.ArrangeOverride(finalSize);
+            return result;
         }
 
         protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
@@ -216,8 +218,15 @@ namespace Avalonia.Controls
         /// <inheritdoc/>
         protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
         {
+            // dispose any previous track size listener
+            _trackSizeChangedListener?.Dispose();
+            
             _indicator = e.NameScope.Get<Border>("PART_Indicator");
 
+            // listen to size changes of the indicators track (parent) and update the indicator there. 
+            _trackSizeChangedListener = _indicator.Parent?.GetPropertyChangedObservable(BoundsProperty)
+                .Subscribe(_ => UpdateIndicator());
+            
             UpdateIndicator();
         }