diff --git a/src/Avalonia.Controls/Primitives/RangeBase.cs b/src/Avalonia.Controls/Primitives/RangeBase.cs
index ae175734b9..f1ee7c0e1a 100644
--- a/src/Avalonia.Controls/Primitives/RangeBase.cs
+++ b/src/Avalonia.Controls/Primitives/RangeBase.cs
@@ -75,10 +75,18 @@ namespace Avalonia.Controls.Primitives
set
{
- value = ValidateMinimum(value);
- SetAndRaise(MinimumProperty, ref _minimum, value);
- Maximum = ValidateMaximum(Maximum);
- Value = ValidateValue(Value);
+ ValidateDouble(value, "Minimum");
+
+ if (IsInitialized)
+ {
+ SetAndRaise(MinimumProperty, ref _minimum, value);
+ Maximum = ValidateMaximum(Maximum);
+ Value = ValidateValue(Value);
+ }
+ else
+ {
+ SetAndRaise(MinimumProperty, ref _minimum, value);
+ }
}
}
@@ -94,9 +102,18 @@ namespace Avalonia.Controls.Primitives
set
{
- value = ValidateMaximum(value);
- SetAndRaise(MaximumProperty, ref _maximum, value);
- Value = ValidateValue(Value);
+ ValidateDouble(value, "Maximum");
+
+ if (IsInitialized)
+ {
+ value = ValidateMaximum(value);
+ SetAndRaise(MaximumProperty, ref _maximum, value);
+ Value = ValidateValue(Value);
+ }
+ else
+ {
+ SetAndRaise(MaximumProperty, ref _maximum, value);
+ }
}
}
@@ -112,8 +129,17 @@ namespace Avalonia.Controls.Primitives
set
{
- value = ValidateValue(value);
- SetAndRaise(ValueProperty, ref _value, value);
+ ValidateDouble(value, "Value");
+
+ if (IsInitialized)
+ {
+ value = ValidateValue(value);
+ SetAndRaise(ValueProperty, ref _value, value);
+ }
+ else
+ {
+ SetAndRaise(ValueProperty, ref _value, value);
+ }
}
}
@@ -129,6 +155,14 @@ namespace Avalonia.Controls.Primitives
set => SetValue(LargeChangeProperty, value);
}
+ protected override void OnInitialized()
+ {
+ base.OnInitialized();
+
+ Maximum = ValidateMaximum(Maximum);
+ Value = ValidateValue(Value);
+ }
+
///
/// Throws an exception if the double value is NaN or Inf.
///
@@ -142,17 +176,6 @@ namespace Avalonia.Controls.Primitives
}
}
- ///
- /// Validates the property.
- ///
- /// The value.
- /// The coerced value.
- private double ValidateMinimum(double value)
- {
- ValidateDouble(value, "Minimum");
- return value;
- }
-
///
/// Validates/coerces the property.
///
@@ -160,7 +183,6 @@ namespace Avalonia.Controls.Primitives
/// The coerced value.
private double ValidateMaximum(double value)
{
- ValidateDouble(value, "Maximum");
return Math.Max(value, Minimum);
}
@@ -171,7 +193,6 @@ namespace Avalonia.Controls.Primitives
/// The coerced value.
private double ValidateValue(double value)
{
- ValidateDouble(value, "Value");
return MathUtilities.Clamp(value, Minimum, Maximum);
}
}
diff --git a/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs b/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs
index 0d88a1a9ff..d913e3e54f 100644
--- a/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs
+++ b/tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs
@@ -23,6 +23,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
Minimum = 100,
Maximum = 50,
};
+ var root = new TestRoot(target);
Assert.Equal(100, target.Minimum);
Assert.Equal(100, target.Maximum);
@@ -37,6 +38,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
Maximum = 50,
Value = 100,
};
+ var root = new TestRoot(target);
Assert.Equal(0, target.Minimum);
Assert.Equal(50, target.Maximum);
@@ -52,6 +54,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
Maximum = 100,
Value = 50,
};
+ var root = new TestRoot(target);
target.Minimum = 200;
@@ -69,6 +72,7 @@ namespace Avalonia.Controls.UnitTests.Primitives
Maximum = 100,
Value = 100,
};
+ var root = new TestRoot(target);
target.Maximum = 50;