private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var s = (string)e.NewValue;
var regex = new Regex(@"^(-?\d+\.|-0?)$");
if (string.IsNullOrEmpty(s) || regex.Match(s).Success)
return;
if (double.TryParse((string)e.NewValue, out var oldValue))
{
if (!(bool)d.GetValue(EnforceRangeProperty))
return;
var min = (double)d.GetValue(MinProperty);
var max = (double)d.GetValue(MaxProperty);
var newValue = Math.Max(min, oldValue);
newValue = Math.Min(max, newValue);
// ReSharper disable once CompareOfFloatsByEqualityOperator
if (newValue == oldValue)
return;
d.SetValue(TextProperty, newValue.ToString(CultureInfo.InvariantCulture));
return;
}
// If we can't parse the text, revert to the old value.
d.SetValue(TextProperty, (string)e.OldValue);
}
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var s = (string)e.NewValue;
var regex = new Regex(@"^(-?\d+\.|-0?)$");
if (string.IsNullOrEmpty(s) || regex.Match(s).Success)
return;
if (double.TryParse((string)e.NewValue, out var oldValue))
{
if (!(bool)d.GetValue(EnforceRangeProperty))
return;
var min = (double)d.GetValue(MinProperty);
var max = (double)d.GetValue(MaxProperty);
var newValue = Math.Max(min, oldValue);
newValue = Math.Min(max, newValue);
// ReSharper disable once CompareOfFloatsByEqualityOperator
if (newValue == oldValue)
return;
d.SetValue(TextProperty, newValue.ToString(CultureInfo.InvariantCulture));
return;
}
// If we can't parse the text, revert to the old value.
d.SetValue(TextProperty, (string)e.OldValue);
}