From 6f5d844125afcf54878b956f7419357d4bd1aa9a Mon Sep 17 00:00:00 2001 From: brianlagunas_cp Date: Thu, 31 Mar 2011 00:24:47 +0000 Subject: [PATCH] checked in initial IntegerUpDown control. Not ready for use, just getting it in the code base. --- .../Core/Primitives/UpDownBase.cs | 22 ++-- .../Implementation/IntegerUpDown.cs | 104 ++++++++++++++++++ .../NumericUpDown/Themes/Generic.xaml | 41 ++++++- .../Editors/IntegerUpDownEditor.cs | 12 ++ .../Implementation/PropertyGrid.cs | 6 +- .../WPFToolkit.Extended.csproj | 2 + 6 files changed, 176 insertions(+), 11 deletions(-) create mode 100644 ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/IntegerUpDown.cs create mode 100644 ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/Editors/IntegerUpDownEditor.cs diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/UpDownBase.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/UpDownBase.cs index 3f4c1a5e..c1bfc015 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/UpDownBase.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/Core/Primitives/UpDownBase.cs @@ -243,7 +243,7 @@ namespace Microsoft.Windows.Controls.Primitives #region Value - public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(T), typeof(UpDownBase), new UIPropertyMetadata(default(T), OnValueChanged, OnCoerceValue)); + public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(T), typeof(UpDownBase), new FrameworkPropertyMetadata(default(T), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnValueChanged, OnCoerceValue)); public T Value { get { return (T)GetValue(ValueProperty); } @@ -301,6 +301,12 @@ namespace Microsoft.Windows.Controls.Primitives Spinner.Spin += OnSpinnerSpin; } + protected override void OnGotFocus(RoutedEventArgs e) + { + if (TextBox != null) + TextBox.Focus(); + } + protected override void OnPreviewKeyDown(KeyEventArgs e) { switch (e.Key) @@ -319,12 +325,12 @@ namespace Microsoft.Windows.Controls.Primitives e.Handled = true; break; } - //case Key.Enter: - // { - // if (IsEditable) - // SyncTextAndValueProperties(UpDownBase.TextProperty, TextBox.Text); - // break; - // } + case Key.Enter: + { + if (IsEditable) + SyncTextAndValueProperties(UpDownBase.TextProperty, TextBox.Text); + break; + } } } @@ -366,7 +372,7 @@ namespace Microsoft.Windows.Controls.Primitives #region Events - public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent("ValueChanged", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler), typeof(NumericUpDown)); + public static readonly RoutedEvent ValueChangedEvent = EventManager.RegisterRoutedEvent("ValueChanged", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler), typeof(UpDownBase)); public event RoutedPropertyChangedEventHandler ValueChanged { add { AddHandler(ValueChangedEvent, value); } diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/IntegerUpDown.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/IntegerUpDown.cs new file mode 100644 index 00000000..fb128094 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Implementation/IntegerUpDown.cs @@ -0,0 +1,104 @@ +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 Microsoft.Windows.Controls.Primitives; + +namespace Microsoft.Windows.Controls +{ + public class IntegerUpDown : UpDownBase + { + #region Properties + + #region DefaultValue + + //can possibly be in base class + public static readonly DependencyProperty DefaultValueProperty = DependencyProperty.Register("DefaultValue", typeof(int), typeof(IntegerUpDown), new UIPropertyMetadata(default(int))); + public int DefaultValue + { + get { return (int)GetValue(DefaultValueProperty); } + set { SetValue(DefaultValueProperty, value); } + } + + #endregion //DefaultValue + + #region Increment + + public static readonly DependencyProperty IncrementProperty = DependencyProperty.Register("Increment", typeof(int), typeof(IntegerUpDown), new PropertyMetadata(1)); + public int Increment + { + get { return (int)GetValue(IncrementProperty); } + set { SetValue(IncrementProperty, value); } + } + + #endregion + + #endregion //Properties + + #region Constructors + + static IntegerUpDown() + { + DefaultStyleKeyProperty.OverrideMetadata(typeof(IntegerUpDown), new FrameworkPropertyMetadata(typeof(IntegerUpDown))); + } + + #endregion //Constructors + + #region Base Class Overrides + + protected override void OnIncrement() + { + if (Value.HasValue) + Value += Increment; + else + Value = DefaultValue; + } + + protected override void OnDecrement() + { + if (Value.HasValue) + Value -= Increment; + else + Value = DefaultValue; + } + + protected override int? ConvertTextToValue(string text) + { + int? result = null; + + if (String.IsNullOrEmpty(text)) + return result; + + try + { + result = Int16.Parse(text, System.Globalization.NumberStyles.Any); + } + catch + { + Text = ConvertValueToText(Value); + return Value; + } + + return result; + } + + protected override string ConvertValueToText(object value) + { + if (value == null) + return string.Empty; + + return value.ToString(); + } + + #endregion //Base Class Overrides + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Themes/Generic.xaml b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Themes/Generic.xaml index 75b85e87..5c8ef8ef 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Themes/Generic.xaml +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/NumericUpDown/Themes/Generic.xaml @@ -1,7 +1,8 @@  + xmlns:coreConverters="clr-namespace:Microsoft.Windows.Controls.Core.Converters" + xmlns:prims="clr-namespace:Microsoft.Windows.Controls.Primitives"> @@ -9,6 +10,44 @@ + + + + + + diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/Editors/IntegerUpDownEditor.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/Editors/IntegerUpDownEditor.cs new file mode 100644 index 00000000..fede0db8 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/Editors/IntegerUpDownEditor.cs @@ -0,0 +1,12 @@ +using System; + +namespace Microsoft.Windows.Controls.PropertyGrid.Editors +{ + public class IntegerUpDownEditor : TypeEditor + { + protected override void SetValueDependencyProperty() + { + ValueProperty = IntegerUpDown.ValueProperty; + } + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs index b5489ee1..9ac9e05a 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs @@ -322,8 +322,10 @@ namespace Microsoft.Windows.Controls.PropertyGrid editor = new TextBlockEditor(); else if (propertyItem.PropertyType == typeof(bool)) editor = new CheckBoxEditor(); - else if (propertyItem.PropertyType == typeof(double) || propertyItem.PropertyType == typeof(int)) - editor = new NumericUpDownEditor(); + //else if (propertyItem.PropertyType == typeof(double)) + // editor = new NumericUpDownEditor(); + else if (propertyItem.PropertyType == typeof(int) || propertyItem.PropertyType == typeof(int?)) + editor = new IntegerUpDownEditor(); else if (propertyItem.PropertyType == typeof(DateTime)) editor = new DateTimeUpDownEditor(); else if (propertyItem.PropertyType.IsEnum) diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj index 1e5f0139..d4dc7703 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj @@ -177,6 +177,7 @@ + @@ -211,6 +212,7 @@ +