diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/InputBase.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/InputBase.cs index 9b19c0ff..35c6b4d6 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/InputBase.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/InputBase.cs @@ -57,7 +57,7 @@ namespace Microsoft.Windows.Controls.Primitives #region Value - public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(object), typeof(InputBase), new FrameworkPropertyMetadata(default(object), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnValuePropertyChanged)); + public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(object), typeof(InputBase), new FrameworkPropertyMetadata(default(object), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnValuePropertyChanged, OnCoerceValuePropertyCallback)); public virtual object Value { get { return (object)GetValue(ValueProperty); } @@ -83,6 +83,20 @@ namespace Microsoft.Windows.Controls.Primitives } + private static object OnCoerceValuePropertyCallback(DependencyObject d, object baseValue) + { + InputBase inputBase = d as InputBase; + if (inputBase != null) + return inputBase.OnCoerceValue(baseValue); + else + return baseValue; + } + + protected virtual object OnCoerceValue(object value) + { + return value; + } + #endregion //Value #region ValueType diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/NumericUpDown.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/NumericUpDown.cs index 715b7563..04d2cbe3 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/NumericUpDown.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/NumericUpDown.cs @@ -101,6 +101,26 @@ namespace Microsoft.Windows.Controls SetValidSpinDirection(); } + protected override object OnCoerceValue(object value) + { + if (value == null) return value; + + double val = Convert.ToDouble(value); + + if (val < Minimum) + { + return Minimum; + } + else if (val > Maximum) + { + return Maximum; + } + else + { + return value; + } + } + protected override object ConvertTextToValue(string text) { object result = null;