|
|
@@ -15,34 +15,38 @@ namespace Perspex.Controls.Primitives
|
|
|
/// Defines the <see cref="Minimum"/> property.
|
|
|
/// </summary>
|
|
|
public static readonly PerspexProperty<double> MinimumProperty =
|
|
|
- PerspexProperty.Register<RangeBase, double>(
|
|
|
+ PerspexProperty.RegisterDirect<RangeBase, double>(
|
|
|
nameof(Minimum),
|
|
|
- validate: ValidateMinimum);
|
|
|
+ o => o.Minimum,
|
|
|
+ (o, v) => o.Minimum = v);
|
|
|
|
|
|
/// <summary>
|
|
|
/// Defines the <see cref="Maximum"/> property.
|
|
|
/// </summary>
|
|
|
public static readonly PerspexProperty<double> MaximumProperty =
|
|
|
- PerspexProperty.Register<RangeBase, double>(
|
|
|
+ PerspexProperty.RegisterDirect<RangeBase, double>(
|
|
|
nameof(Maximum),
|
|
|
- defaultValue: 100.0,
|
|
|
- validate: ValidateMaximum);
|
|
|
+ o => o.Maximum,
|
|
|
+ (o, v) => o.Maximum = v);
|
|
|
|
|
|
/// <summary>
|
|
|
/// Defines the <see cref="Value"/> property.
|
|
|
/// </summary>
|
|
|
public static readonly PerspexProperty<double> ValueProperty =
|
|
|
- PerspexProperty.Register<RangeBase, double>(
|
|
|
+ PerspexProperty.RegisterDirect<RangeBase, double>(
|
|
|
nameof(Value),
|
|
|
- validate: ValidateValue);
|
|
|
+ o => o.Value,
|
|
|
+ (o, v) => o.Value = v);
|
|
|
+
|
|
|
+ private double _minimum;
|
|
|
+ private double _maximum = 100.0;
|
|
|
+ private double _value;
|
|
|
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="RangeBase"/> class.
|
|
|
/// </summary>
|
|
|
public RangeBase()
|
|
|
{
|
|
|
- AffectsValidation(MinimumProperty, MaximumProperty, ValueProperty);
|
|
|
- AffectsValidation(MaximumProperty, ValueProperty);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -50,8 +54,18 @@ namespace Perspex.Controls.Primitives
|
|
|
/// </summary>
|
|
|
public double Minimum
|
|
|
{
|
|
|
- get { return GetValue(MinimumProperty); }
|
|
|
- set { SetValue(MinimumProperty, value); }
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return _minimum;
|
|
|
+ }
|
|
|
+
|
|
|
+ set
|
|
|
+ {
|
|
|
+ value = ValidateMinimum(value);
|
|
|
+ SetAndRaise(MinimumProperty, ref _minimum, value);
|
|
|
+ Maximum = ValidateMaximum(Maximum);
|
|
|
+ Value = ValidateValue(Value);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -59,8 +73,17 @@ namespace Perspex.Controls.Primitives
|
|
|
/// </summary>
|
|
|
public double Maximum
|
|
|
{
|
|
|
- get { return GetValue(MaximumProperty); }
|
|
|
- set { SetValue(MaximumProperty, value); }
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return _maximum;
|
|
|
+ }
|
|
|
+
|
|
|
+ set
|
|
|
+ {
|
|
|
+ value = ValidateMaximum(value);
|
|
|
+ SetAndRaise(MaximumProperty, ref _maximum, value);
|
|
|
+ Value = ValidateValue(Value);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -68,8 +91,16 @@ namespace Perspex.Controls.Primitives
|
|
|
/// </summary>
|
|
|
public double Value
|
|
|
{
|
|
|
- get { return GetValue(ValueProperty); }
|
|
|
- set { SetValue(ValueProperty, value); }
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return _value;
|
|
|
+ }
|
|
|
+
|
|
|
+ set
|
|
|
+ {
|
|
|
+ value = ValidateValue(value);
|
|
|
+ SetAndRaise(ValueProperty, ref _value, value);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
@@ -88,10 +119,9 @@ namespace Perspex.Controls.Primitives
|
|
|
/// <summary>
|
|
|
/// Validates the <see cref="Minimum"/> property.
|
|
|
/// </summary>
|
|
|
- /// <param name="sender">The RangeBase control.</param>
|
|
|
/// <param name="value">The value.</param>
|
|
|
/// <returns>The coerced value.</returns>
|
|
|
- private static double ValidateMinimum(RangeBase sender, double value)
|
|
|
+ private double ValidateMinimum(double value)
|
|
|
{
|
|
|
ValidateDouble(value, "Minimum");
|
|
|
return value;
|
|
|
@@ -100,25 +130,23 @@ namespace Perspex.Controls.Primitives
|
|
|
/// <summary>
|
|
|
/// Validates/coerces the <see cref="Maximum"/> property.
|
|
|
/// </summary>
|
|
|
- /// <param name="sender">The RangeBase control.</param>
|
|
|
/// <param name="value">The value.</param>
|
|
|
/// <returns>The coerced value.</returns>
|
|
|
- private static double ValidateMaximum(RangeBase sender, double value)
|
|
|
+ private double ValidateMaximum(double value)
|
|
|
{
|
|
|
ValidateDouble(value, "Maximum");
|
|
|
- return Math.Max(value, sender.Minimum);
|
|
|
+ return Math.Max(value, Minimum);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Validates/coerces the <see cref="Value"/> property.
|
|
|
/// </summary>
|
|
|
- /// <param name="sender">The RangeBase control.</param>
|
|
|
/// <param name="value">The value.</param>
|
|
|
/// <returns>The coerced value.</returns>
|
|
|
- private static double ValidateValue(RangeBase sender, double value)
|
|
|
+ private double ValidateValue(double value)
|
|
|
{
|
|
|
ValidateDouble(value, "Value");
|
|
|
- return MathUtilities.Clamp(value, sender.Minimum, sender.Maximum);
|
|
|
+ return MathUtilities.Clamp(value, Minimum, Maximum);
|
|
|
}
|
|
|
}
|
|
|
}
|