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 @@
+