public static object MinValueCoerceValueCallback(DependencyObject d, object baseValue) { DragInput dragInput = d as DragInput; double min = (double)baseValue; return(min > dragInput.MaxValue ? dragInput.MaxValue : min); }
//Not using this way because coerced value does not update the source of binding public static object ValueCoerceValueCallback(DependencyObject d, object baseValue) { DragInput dragInput = d as DragInput; double val; if (double.TryParse(baseValue == null ? "0" : baseValue.ToString(), out val)) { val = val > dragInput.MaxValue ? dragInput.MaxValue : (val < dragInput.MinValue ? dragInput.MinValue : val); } return(string.Format("{0:F" + dragInput.Precision + "}", val)); }
public static void ValuePropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { DragInput dragInput = d as DragInput; double val; string strVal = e.NewValue == null ? "0" : e.NewValue.ToString(); if (double.TryParse(strVal, out val)) { val = val > dragInput.MaxValue ? dragInput.MaxValue : val < dragInput.MinValue ? dragInput.MinValue : val; } string formattedVal = string.Format("{0:F" + dragInput.Precision + "}", val); if (strVal != formattedVal) { dragInput.Value = formattedVal; } }