diff --git a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs index 142d593e3..1765760ab 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; @@ -75,8 +75,10 @@ public event EventHandler> SelectedDateTimeChanged static DateTimePicker() { EventManager.RegisterClassHandler(typeof(DateTimePicker), GotFocusEvent, new RoutedEventHandler(OnGotFocus)); - KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(DateTimePicker), new FrameworkPropertyMetadata(KeyboardNavigationMode.Once)); - KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(DateTimePicker), new FrameworkPropertyMetadata(ValueBoxes.FalseBox)); + KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(DateTimePicker), + new FrameworkPropertyMetadata(KeyboardNavigationMode.Once)); + KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(DateTimePicker), + new FrameworkPropertyMetadata(ValueBoxes.FalseBox)); } public DateTimePicker() @@ -111,7 +113,9 @@ public Style CalendarStyle } public static readonly DependencyProperty DisplayDateTimeProperty = DependencyProperty.Register( - nameof(DisplayDateTime), typeof(DateTime), typeof(DateTimePicker), new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null, CoerceDisplayDateTime)); + nameof(DisplayDateTime), typeof(DateTime), typeof(DateTimePicker), + new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null, + CoerceDisplayDateTime)); private static object CoerceDisplayDateTime(DependencyObject d, object value) { @@ -128,7 +132,9 @@ public DateTime DisplayDateTime } public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register( - nameof(IsDropDownOpen), typeof(bool), typeof(DateTimePicker), new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen)); + nameof(IsDropDownOpen), typeof(bool), typeof(DateTimePicker), + new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, + OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen)); private static object OnCoerceIsDropDownOpen(DependencyObject d, object baseValue) => d is DateTimePicker @@ -165,7 +171,9 @@ public bool IsDropDownOpen } public static readonly DependencyProperty SelectedDateTimeProperty = DependencyProperty.Register( - nameof(SelectedDateTime), typeof(DateTime?), typeof(DateTimePicker), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedDateTimeChanged, CoerceSelectedDateTime)); + nameof(SelectedDateTime), typeof(DateTime?), typeof(DateTimePicker), + new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, + OnSelectedDateTimeChanged, CoerceSelectedDateTime)); private static object CoerceSelectedDateTime(DependencyObject d, object value) { @@ -183,6 +191,10 @@ private static void OnSelectedDateTimeChanged(DependencyObject d, DependencyProp var time = dp.SelectedDateTime.Value; dp.SetTextInternal(dp.DateTimeToString(time)); } + else + { + dp.SetTextInternal(string.Empty); + } dp.RaiseEvent(new FunctionEventArgs(SelectedDateTimeChangedEvent, dp) { @@ -197,7 +209,8 @@ public DateTime? SelectedDateTime } public static readonly DependencyProperty TextProperty = DependencyProperty.Register( - nameof(Text), typeof(string), typeof(DateTimePicker), new FrameworkPropertyMetadata(string.Empty, OnTextChanged)); + nameof(Text), typeof(string), typeof(DateTimePicker), + new FrameworkPropertyMetadata(string.Empty, OnTextChanged)); private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { @@ -328,7 +341,8 @@ public override void OnApplyTemplate() { _textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this }); #if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472) - _textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this }); + _textBox.SetBinding(SelectionTextBrushProperty, + new Binding(SelectionTextBrushProperty.Name) { Source = this }); #endif _textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this }); _textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this }); @@ -402,7 +416,8 @@ private void InitCalendarWithClock() private void CalendarWithClock_Confirmed() => TogglePopup(); - private void CalendarWithClock_SelectedDateTimeChanged(object sender, FunctionEventArgs e) => SelectedDateTime = e.Info; + private void CalendarWithClock_SelectedDateTimeChanged(object sender, FunctionEventArgs e) => + SelectedDateTime = e.Info; private void TextBox_LostFocus(object sender, RoutedEventArgs e) { @@ -445,29 +460,29 @@ private bool ProcessDateTimePickerKey(KeyEventArgs e) switch (e.Key) { case Key.System: + { + switch (e.SystemKey) { - switch (e.SystemKey) + case Key.Down: { - case Key.Down: - { - if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) - { - TogglePopup(); - return true; - } - - break; - } - } + if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) + { + TogglePopup(); + return true; + } - break; + break; + } } + break; + } + case Key.Enter: - { - SetSelectedDateTime(); - return true; - } + { + SetSelectedDateTime(); + return true; + } } return false; @@ -588,10 +603,10 @@ private void SafeSetText(string s) if (SelectedDateTime != null) { - var newtext = DateTimeToString(SelectedDateTime.Value); - SafeSetText(newtext); + SafeSetText(DateTimeToString(SelectedDateTime.Value)); return SelectedDateTime; } + SafeSetText(DateTimeToString(DisplayDateTime)); return DisplayDateTime; } @@ -620,7 +635,7 @@ private void SetSelectedDateTime() } var d = SetTextBoxValue(s); - if (!SelectedDateTime.Equals(d)) + if (!Equals(SelectedDateTime, d)) { SetCurrentValue(SelectedDateTimeProperty, d); SetCurrentValue(DisplayDateTimeProperty, d); @@ -632,12 +647,16 @@ private void SetSelectedDateTime() { SetCurrentValue(SelectedDateTimeProperty, null); } + else + { + SetTextInternal(string.Empty); + } } } else { var d = SetTextBoxValue(_defaultText); - if (!SelectedDateTime.Equals(d)) + if (!Equals(SelectedDateTime, d)) { SetCurrentValue(SelectedDateTimeProperty, d); } diff --git a/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs index 960b6c309..78ea3c143 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs @@ -73,8 +73,10 @@ public event EventHandler> SelectedTimeChanged static TimePicker() { EventManager.RegisterClassHandler(typeof(TimePicker), GotFocusEvent, new RoutedEventHandler(OnGotFocus)); - KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(TimePicker), new FrameworkPropertyMetadata(KeyboardNavigationMode.Once)); - KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(TimePicker), new FrameworkPropertyMetadata(ValueBoxes.FalseBox)); + KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(TimePicker), + new FrameworkPropertyMetadata(KeyboardNavigationMode.Once)); + KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(TimePicker), + new FrameworkPropertyMetadata(ValueBoxes.FalseBox)); } public TimePicker() @@ -115,7 +117,8 @@ public DateTime DisplayTime nameof(DisplayTime), typeof(DateTime), typeof(TimePicker), - new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null, CoerceDisplayTime)); + new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null, + CoerceDisplayTime)); private static object CoerceDisplayTime(DependencyObject d, object value) { @@ -139,7 +142,8 @@ public bool IsDropDownOpen nameof(IsDropDownOpen), typeof(bool), typeof(TimePicker), - new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen)); + new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, + OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen)); private static object OnCoerceIsDropDownOpen(DependencyObject d, object baseValue) { @@ -183,7 +187,8 @@ public DateTime? SelectedTime nameof(SelectedTime), typeof(DateTime?), typeof(TimePicker), - new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedTimeChanged, CoerceSelectedTime)); + new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, + OnSelectedTimeChanged, CoerceSelectedTime)); private static void OnSelectedTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { @@ -194,6 +199,10 @@ private static void OnSelectedTimeChanged(DependencyObject d, DependencyProperty var time = dp.SelectedTime.Value; dp.SetTextInternal(dp.DateTimeToString(time)); } + else + { + dp.SetTextInternal(string.Empty); + } dp.RaiseEvent(new FunctionEventArgs(SelectedTimeChangedEvent, dp) { @@ -306,7 +315,9 @@ public Brush CaretBrush } public static readonly DependencyProperty ClockProperty = DependencyProperty.Register( - nameof(Clock), typeof(ClockBase), typeof(TimePicker), new FrameworkPropertyMetadata(default(Clock), FrameworkPropertyMetadataOptions.NotDataBindable, OnClockChanged)); + nameof(Clock), typeof(ClockBase), typeof(TimePicker), + new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.NotDataBindable, + OnClockChanged)); private static void OnClockChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { @@ -384,7 +395,8 @@ public override void OnApplyTemplate() { _textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this }); #if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472) - _textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this }); + _textBox.SetBinding(SelectionTextBrushProperty, + new Binding(SelectionTextBrushProperty.Name) { Source = this }); #endif _textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this }); _textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this }); @@ -488,29 +500,29 @@ private bool ProcessTimePickerKey(KeyEventArgs e) switch (e.Key) { case Key.System: + { + switch (e.SystemKey) { - switch (e.SystemKey) + case Key.Down: { - case Key.Down: - { - if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) - { - TogglePopup(); - return true; - } - - break; - } - } + if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) + { + TogglePopup(); + return true; + } - break; + break; + } } + break; + } + case Key.Enter: - { - SetSelectedTime(); - return true; - } + { + SetSelectedTime(); + return true; + } } return false; @@ -635,10 +647,10 @@ private void SafeSetText(string s) if (SelectedTime != null) { - var newtext = DateTimeToString((DateTime) SelectedTime); - SafeSetText(newtext); + SafeSetText(DateTimeToString((DateTime) SelectedTime)); return SelectedTime; } + SafeSetText(DateTimeToString(DisplayTime)); return DisplayTime; } @@ -662,7 +674,7 @@ private void SetSelectedTime() } var d = SetTextBoxValue(s); - if (!SelectedTime.Equals(d)) + if (!Equals(SelectedTime, d)) { SetCurrentValue(SelectedTimeProperty, d); SetCurrentValue(DisplayTimeProperty, d); @@ -674,12 +686,16 @@ private void SetSelectedTime() { SetCurrentValue(SelectedTimeProperty, null); } + else + { + SetTextInternal(string.Empty); + } } } else { var d = SetTextBoxValue(_defaultText); - if (!SelectedTime.Equals(d)) + if (!Equals(SelectedTime, d)) { SetCurrentValue(SelectedTimeProperty, d); }