From dd6c83a535b195042e89b002f71048322723697d Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Wed, 12 Nov 2025 21:32:13 +0800 Subject: [PATCH] refactor: DateTimePicker and TimePicker formatting. Improved code formatting and consistency in DateTimePicker.cs and TimePicker.cs by splitting long lines and enhancing readability. Also fixed null handling and text synchronization for selected values in TimePicker. --- .../Controls/Input/DateTimePicker.cs | 67 ++++++++++-------- .../Controls/Input/TimePicker.cs | 70 ++++++++++++------- 2 files changed, 80 insertions(+), 57 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs index 3f8c1295..1765760a 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs @@ -75,8 +75,10 @@ public class DateTimePicker : Control 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 class DateTimePicker : Control } 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 class DateTimePicker : Control } 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 class DateTimePicker : Control } 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) { @@ -185,7 +193,6 @@ public class DateTimePicker : Control } else { - // 修复:当 SelectedDateTime 为 null 时,清空文本框 dp.SetTextInternal(string.Empty); } @@ -202,7 +209,8 @@ public class DateTimePicker : Control } 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) { @@ -333,7 +341,8 @@ public class DateTimePicker : Control { _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 }); @@ -407,7 +416,8 @@ public class DateTimePicker : Control 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) { @@ -450,29 +460,29 @@ public class DateTimePicker : Control 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; - } + if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) + { + TogglePopup(); + return true; + } - break; - } + break; } - - break; } + break; + } + case Key.Enter: - { - SetSelectedDateTime(); - return true; - } + { + SetSelectedDateTime(); + return true; + } } return false; @@ -593,10 +603,10 @@ public class DateTimePicker : Control if (SelectedDateTime != null) { - var newtext = DateTimeToString(SelectedDateTime.Value); - SafeSetText(newtext); + SafeSetText(DateTimeToString(SelectedDateTime.Value)); return SelectedDateTime; } + SafeSetText(DateTimeToString(DisplayDateTime)); return DisplayDateTime; } @@ -625,7 +635,6 @@ public class DateTimePicker : Control } var d = SetTextBoxValue(s); - // 修复:使用静态的 Equals 方法进行安全的 null 比较 if (!Equals(SelectedDateTime, d)) { SetCurrentValue(SelectedDateTimeProperty, d); @@ -640,7 +649,6 @@ public class DateTimePicker : Control } else { - // 修复:确保文本框同步清空 SetTextInternal(string.Empty); } } @@ -648,7 +656,6 @@ public class DateTimePicker : Control else { var d = SetTextBoxValue(_defaultText); - // 修复:使用静态的 Equals 方法进行安全的 null 比较 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 960b6c30..78ea3c14 100644 --- a/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs +++ b/src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs @@ -73,8 +73,10 @@ public class TimePicker : Control 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 class TimePicker : Control 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 class TimePicker : Control 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 class TimePicker : Control 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 @@ public class TimePicker : Control 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 class TimePicker : Control } 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 class TimePicker : Control { _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 @@ public class TimePicker : Control 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; - } + if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt) + { + TogglePopup(); + return true; + } - break; - } + break; } - - break; } + break; + } + case Key.Enter: - { - SetSelectedTime(); - return true; - } + { + SetSelectedTime(); + return true; + } } return false; @@ -635,10 +647,10 @@ public class TimePicker : Control 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 @@ public class TimePicker : Control } var d = SetTextBoxValue(s); - if (!SelectedTime.Equals(d)) + if (!Equals(SelectedTime, d)) { SetCurrentValue(SelectedTimeProperty, d); SetCurrentValue(DisplayTimeProperty, d); @@ -674,12 +686,16 @@ public class TimePicker : Control { SetCurrentValue(SelectedTimeProperty, null); } + else + { + SetTextInternal(string.Empty); + } } } else { var d = SetTextBoxValue(_defaultText); - if (!SelectedTime.Equals(d)) + if (!Equals(SelectedTime, d)) { SetCurrentValue(SelectedTimeProperty, d); }