diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CalculatorUpDown/Implementation/CalculatorUpDown.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CalculatorUpDown/Implementation/CalculatorUpDown.cs new file mode 100644 index 00000000..81aab081 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CalculatorUpDown/Implementation/CalculatorUpDown.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Controls.Primitives; + +namespace Microsoft.Windows.Controls +{ + public class CalculatorUpDown : NumericUpDown + { + #region Members + + private Popup _calculatorPopup; + private Calculator _calculator; + + #endregion //Members + + #region Properties + + #region IsOpen + + public static readonly DependencyProperty IsOpenProperty = DependencyProperty.Register("IsOpen", typeof(bool), typeof(CalculatorUpDown), new UIPropertyMetadata(false, OnIsOpenChanged)); + public bool IsOpen + { + get { return (bool)GetValue(IsOpenProperty); } + set { SetValue(IsOpenProperty, value); } + } + + private static void OnIsOpenChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + CalculatorUpDown calculatorUpDown = o as CalculatorUpDown; + if (calculatorUpDown != null) + calculatorUpDown.OnIsOpenChanged((bool)e.OldValue, (bool)e.NewValue); + } + + protected virtual void OnIsOpenChanged(bool oldValue, bool newValue) + { + + } + + #endregion //IsOpen + + #endregion //Properties + + #region Constructors + + static CalculatorUpDown() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(CalculatorUpDown), new FrameworkPropertyMetadata(typeof(CalculatorUpDown))); + } + + public CalculatorUpDown() + { + Keyboard.AddKeyDownHandler(this, OnKeyDown); + Mouse.AddPreviewMouseDownOutsideCapturedElementHandler(this, OnMouseDownOutsideCapturedElement); + } + + #endregion //Constructors + + #region Base Class Overrides + + public override void OnApplyTemplate() + { + base.OnApplyTemplate(); + _calculatorPopup = (Popup)GetTemplateChild("PART_CalculatorPopup"); + _calculatorPopup.Opened += CalculatorPopup_Opened; + + _calculator = (Calculator)GetTemplateChild("PART_Calculator"); + } + + #endregion //Base Class Overrides + + #region Event Handlers + + void CalculatorPopup_Opened(object sender, EventArgs e) + { + _calculator.Focus(); + } + + private void OnKeyDown(object sender, KeyEventArgs e) + { + switch (e.Key) + { + case Key.Escape: + case Key.Tab: + { + CloseCalculatorUpDown(); + e.Handled = true; + break; + } + } + } + + private void OnMouseDownOutsideCapturedElement(object sender, MouseButtonEventArgs e) + { + CloseCalculatorUpDown(); + } + + #endregion //Event Handlers + + #region Methods + + private void CloseCalculatorUpDown() + { + if (IsOpen) + IsOpen = false; + ReleaseMouseCapture(); + } + + #endregion //Methods + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CalculatorUpDown/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CalculatorUpDown/Themes/Generic.xaml new file mode 100644 index 00000000..d7e1b5aa --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/CalculatorUpDown/Themes/Generic.xaml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/NumericUpDown.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/NumericUpDown.cs index bacbff39..bff86c73 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/NumericUpDown.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/NumericUpDown.cs @@ -12,10 +12,10 @@ namespace Microsoft.Windows.Controls #region Minimum - public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double), typeof(NumericUpDown), new PropertyMetadata(Double.MinValue, OnMinimumPropertyChanged)); - public double Minimum + public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(Decimal.MinValue, OnMinimumPropertyChanged)); + public decimal Minimum { - get { return (double)GetValue(MinimumProperty); } + get { return (decimal)GetValue(MinimumProperty); } set { SetValue(MinimumProperty, value); } } @@ -29,10 +29,10 @@ namespace Microsoft.Windows.Controls #region Maximum - public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(NumericUpDown), new PropertyMetadata(Double.MaxValue, OnMaximumPropertyChanged)); - public double Maximum + public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(Decimal.MaxValue, OnMaximumPropertyChanged)); + public decimal Maximum { - get { return (double)GetValue(MaximumProperty); } + get { return (decimal)GetValue(MaximumProperty); } set { SetValue(MaximumProperty, value); } } @@ -46,10 +46,10 @@ namespace Microsoft.Windows.Controls #region Increment - public static readonly DependencyProperty IncrementProperty = DependencyProperty.Register("Increment", typeof(double), typeof(NumericUpDown), new PropertyMetadata(1.0)); - public double Increment + public static readonly DependencyProperty IncrementProperty = DependencyProperty.Register("Increment", typeof(decimal), typeof(NumericUpDown), new PropertyMetadata(1M)); + public decimal Increment { - get { return (double)GetValue(IncrementProperty); } + get { return (decimal)GetValue(IncrementProperty); } set { SetValue(IncrementProperty, value); } } @@ -95,8 +95,8 @@ namespace Microsoft.Windows.Controls static NumericUpDown() { DefaultStyleKeyProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(typeof(NumericUpDown))); - ValueTypeProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(typeof(double))); - ValueProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(default(Double))); + ValueTypeProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(typeof(decimal))); + ValueProperty.OverrideMetadata(typeof(NumericUpDown), new FrameworkPropertyMetadata(default(decimal))); } #endregion //Constructors @@ -140,7 +140,7 @@ namespace Microsoft.Windows.Controls { if (value == null) return value; - double val = Convert.ToDouble(value); + decimal val = Convert.ToDecimal(value); if (val < Minimum) { @@ -190,19 +190,19 @@ namespace Microsoft.Windows.Controls return "Negative-Infinity"; } - return (Convert.ToDouble(Value)).ToString(FormatString, CultureInfo.CurrentCulture); + return (Convert.ToDecimal(Value)).ToString(FormatString, CultureInfo.CurrentCulture); } protected override void OnIncrement() { - double newValue = (double)(Convert.ToDouble(Value) + (double)Increment); - Value = ValueType != typeof(Double) ? Convert.ChangeType(newValue, ValueType) : newValue; + decimal newValue = (Convert.ToDecimal(Value) + Increment); + Value = ValueType != typeof(Decimal) ? Convert.ChangeType(newValue, ValueType) : newValue; } protected override void OnDecrement() { - double newValue = (double)(Convert.ToDouble(Value) - (double)Increment); - Value = ValueType != typeof(Double) ? Convert.ChangeType(newValue, ValueType) : newValue; + decimal newValue = (Convert.ToDecimal(Value) - Increment); + Value = ValueType != typeof(Decimal) ? Convert.ChangeType(newValue, ValueType) : newValue; } #endregion //Base Class Overrides @@ -234,12 +234,12 @@ namespace Microsoft.Windows.Controls { ValidSpinDirections validDirections = ValidSpinDirections.None; - if (Convert.ToDouble(Value) < Maximum) + if (Convert.ToDecimal(Value) < Maximum) { validDirections = validDirections | ValidSpinDirections.Increase; } - if (Convert.ToDouble(Value) > Minimum) + if (Convert.ToDecimal(Value) > Minimum) { validDirections = validDirections | ValidSpinDirections.Decrease; } @@ -256,7 +256,11 @@ namespace Microsoft.Windows.Controls { try { - if (typeof(double) == dataType) + if (typeof(decimal) == dataType) + { + return ParseDecimal(text, info); + } + else if (typeof(double) == dataType) { return ParseDouble(text, info); } @@ -271,10 +275,6 @@ namespace Microsoft.Windows.Controls { return ParseWholeNumber(text, dataType, info); } - else if (typeof(decimal) == dataType) - { - return ParseDecimal(text, info); - } else { throw new ArgumentException("Type not supported"); @@ -293,8 +293,7 @@ namespace Microsoft.Windows.Controls private static float ParseFloat(string text, NumberFormatInfo info) { - double result = double.Parse(text, NumberStyles.Any, info); - return (float)result; + return float.Parse(text, NumberStyles.Any, info); } private static decimal ParseDecimal(string text, NumberFormatInfo info) diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml index f50d0dd8..febe9614 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Themes/Generic.xaml @@ -5,6 +5,7 @@ + diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj index 53728a90..b1b1930f 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj @@ -67,6 +67,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -143,6 +147,7 @@ +