From 9e6deb238645cbf93b15adf619a90d19c1cdbf54 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 13 Jul 2022 09:22:34 +0200 Subject: [PATCH] fix for ProgressBar not listening to size changes of parent If the track for the progressbar changes its size the indicator needs to update as well. --- src/Avalonia.Controls/ProgressBar.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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(); }