diff --git a/src/Avalonia.Controls/ProgressBar.cs b/src/Avalonia.Controls/ProgressBar.cs index d0e8e8f1a0..56b9caf085 100644 --- a/src/Avalonia.Controls/ProgressBar.cs +++ b/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 IsIndeterminateProperty = AvaloniaProperty.Register(nameof(IsIndeterminate)); @@ -195,8 +196,9 @@ namespace Avalonia.Controls /// 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 /// protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { + // dispose any previous track size listener + _trackSizeChangedListener?.Dispose(); + _indicator = e.NameScope.Get("PART_Indicator"); + // listen to size changes of the indicators track (parent) and update the indicator there. + _trackSizeChangedListener = _indicator.Parent?.GetPropertyChangedObservable(BoundsProperty) + .Subscribe(_ => UpdateIndicator()); + UpdateIndicator(); }