From 3ed4cc01926c6256354c915d629fb38338f1535a Mon Sep 17 00:00:00 2001 From: Nelson Carrillo Date: Sat, 25 Jul 2015 17:36:32 -0400 Subject: [PATCH] Moved ProgressBar value calculation to ValueChanged Moved indicator lookup to OnTemplateApplied --- Perspex.Controls/ProgressBar.cs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/Perspex.Controls/ProgressBar.cs b/Perspex.Controls/ProgressBar.cs index 2afbd3bc87..bcc97a4404 100644 --- a/Perspex.Controls/ProgressBar.cs +++ b/Perspex.Controls/ProgressBar.cs @@ -15,16 +15,27 @@ namespace Perspex.Controls /// public class ProgressBar : RangeBase { - /// - protected override Size ArrangeOverride(Size finalSize) + static ProgressBar() { - var size = base.ArrangeOverride(finalSize); - var b = this.Bounds; + ValueProperty.Changed.AddClassHandler(x => x.ValueChanged); + } - var indicator = this.GetTemplateChild("PART_Indicator"); - indicator.Width = Math.Max(this.Minimum, finalSize.Width * (this.Value / this.Maximum)); + private Border indicator; - return size; + /// + /// + protected override void OnTemplateApplied() + { + this.indicator = this.GetTemplateChild("PART_Indicator"); + } + + private void ValueChanged(PerspexPropertyChangedEventArgs e) + { + if (this.indicator != null) + { + double percent = this.Maximum == this.Minimum ? 1.0 : ((double)e.NewValue - this.Minimum) / (this.Maximum - this.Minimum); + this.indicator.Width = this.Bounds.Width * percent; + } } } }