Skip to content

Commit dd6c83a

Browse files
committed
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.
1 parent d7b4361 commit dd6c83a

File tree

2 files changed

+82
-59
lines changed

2 files changed

+82
-59
lines changed

src/Shared/HandyControl_Shared/Controls/Input/DateTimePicker.cs

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ public event EventHandler<FunctionEventArgs<DateTime?>> SelectedDateTimeChanged
7575
static DateTimePicker()
7676
{
7777
EventManager.RegisterClassHandler(typeof(DateTimePicker), GotFocusEvent, new RoutedEventHandler(OnGotFocus));
78-
KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(DateTimePicker), new FrameworkPropertyMetadata(KeyboardNavigationMode.Once));
79-
KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(DateTimePicker), new FrameworkPropertyMetadata(ValueBoxes.FalseBox));
78+
KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(DateTimePicker),
79+
new FrameworkPropertyMetadata(KeyboardNavigationMode.Once));
80+
KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(DateTimePicker),
81+
new FrameworkPropertyMetadata(ValueBoxes.FalseBox));
8082
}
8183

8284
public DateTimePicker()
@@ -111,7 +113,9 @@ public Style CalendarStyle
111113
}
112114

113115
public static readonly DependencyProperty DisplayDateTimeProperty = DependencyProperty.Register(
114-
nameof(DisplayDateTime), typeof(DateTime), typeof(DateTimePicker), new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null, CoerceDisplayDateTime));
116+
nameof(DisplayDateTime), typeof(DateTime), typeof(DateTimePicker),
117+
new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null,
118+
CoerceDisplayDateTime));
115119

116120
private static object CoerceDisplayDateTime(DependencyObject d, object value)
117121
{
@@ -128,7 +132,9 @@ public DateTime DisplayDateTime
128132
}
129133

130134
public static readonly DependencyProperty IsDropDownOpenProperty = DependencyProperty.Register(
131-
nameof(IsDropDownOpen), typeof(bool), typeof(DateTimePicker), new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen));
135+
nameof(IsDropDownOpen), typeof(bool), typeof(DateTimePicker),
136+
new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
137+
OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen));
132138

133139
private static object OnCoerceIsDropDownOpen(DependencyObject d, object baseValue) =>
134140
d is DateTimePicker
@@ -165,7 +171,9 @@ public bool IsDropDownOpen
165171
}
166172

167173
public static readonly DependencyProperty SelectedDateTimeProperty = DependencyProperty.Register(
168-
nameof(SelectedDateTime), typeof(DateTime?), typeof(DateTimePicker), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedDateTimeChanged, CoerceSelectedDateTime));
174+
nameof(SelectedDateTime), typeof(DateTime?), typeof(DateTimePicker),
175+
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
176+
OnSelectedDateTimeChanged, CoerceSelectedDateTime));
169177

170178
private static object CoerceSelectedDateTime(DependencyObject d, object value)
171179
{
@@ -185,7 +193,6 @@ private static void OnSelectedDateTimeChanged(DependencyObject d, DependencyProp
185193
}
186194
else
187195
{
188-
// 修复:当 SelectedDateTime 为 null 时,清空文本框
189196
dp.SetTextInternal(string.Empty);
190197
}
191198

@@ -202,7 +209,8 @@ public DateTime? SelectedDateTime
202209
}
203210

204211
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
205-
nameof(Text), typeof(string), typeof(DateTimePicker), new FrameworkPropertyMetadata(string.Empty, OnTextChanged));
212+
nameof(Text), typeof(string), typeof(DateTimePicker),
213+
new FrameworkPropertyMetadata(string.Empty, OnTextChanged));
206214

207215
private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
208216
{
@@ -333,7 +341,8 @@ public override void OnApplyTemplate()
333341
{
334342
_textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
335343
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
336-
_textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
344+
_textBox.SetBinding(SelectionTextBrushProperty,
345+
new Binding(SelectionTextBrushProperty.Name) { Source = this });
337346
#endif
338347
_textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
339348
_textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
@@ -407,7 +416,8 @@ private void InitCalendarWithClock()
407416

408417
private void CalendarWithClock_Confirmed() => TogglePopup();
409418

410-
private void CalendarWithClock_SelectedDateTimeChanged(object sender, FunctionEventArgs<DateTime?> e) => SelectedDateTime = e.Info;
419+
private void CalendarWithClock_SelectedDateTimeChanged(object sender, FunctionEventArgs<DateTime?> e) =>
420+
SelectedDateTime = e.Info;
411421

412422
private void TextBox_LostFocus(object sender, RoutedEventArgs e)
413423
{
@@ -450,29 +460,29 @@ private bool ProcessDateTimePickerKey(KeyEventArgs e)
450460
switch (e.Key)
451461
{
452462
case Key.System:
463+
{
464+
switch (e.SystemKey)
453465
{
454-
switch (e.SystemKey)
466+
case Key.Down:
455467
{
456-
case Key.Down:
457-
{
458-
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
459-
{
460-
TogglePopup();
461-
return true;
462-
}
463-
464-
break;
465-
}
466-
}
468+
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
469+
{
470+
TogglePopup();
471+
return true;
472+
}
467473

468-
break;
474+
break;
475+
}
469476
}
470477

478+
break;
479+
}
480+
471481
case Key.Enter:
472-
{
473-
SetSelectedDateTime();
474-
return true;
475-
}
482+
{
483+
SetSelectedDateTime();
484+
return true;
485+
}
476486
}
477487

478488
return false;
@@ -593,10 +603,10 @@ private void SafeSetText(string s)
593603

594604
if (SelectedDateTime != null)
595605
{
596-
var newtext = DateTimeToString(SelectedDateTime.Value);
597-
SafeSetText(newtext);
606+
SafeSetText(DateTimeToString(SelectedDateTime.Value));
598607
return SelectedDateTime;
599608
}
609+
600610
SafeSetText(DateTimeToString(DisplayDateTime));
601611
return DisplayDateTime;
602612
}
@@ -625,7 +635,6 @@ private void SetSelectedDateTime()
625635
}
626636

627637
var d = SetTextBoxValue(s);
628-
// 修复:使用静态的 Equals 方法进行安全的 null 比较
629638
if (!Equals(SelectedDateTime, d))
630639
{
631640
SetCurrentValue(SelectedDateTimeProperty, d);
@@ -640,15 +649,13 @@ private void SetSelectedDateTime()
640649
}
641650
else
642651
{
643-
// 修复:确保文本框同步清空
644652
SetTextInternal(string.Empty);
645653
}
646654
}
647655
}
648656
else
649657
{
650658
var d = SetTextBoxValue(_defaultText);
651-
// 修复:使用静态的 Equals 方法进行安全的 null 比较
652659
if (!Equals(SelectedDateTime, d))
653660
{
654661
SetCurrentValue(SelectedDateTimeProperty, d);

src/Shared/HandyControl_Shared/Controls/Input/TimePicker.cs

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,10 @@ public event EventHandler<FunctionEventArgs<DateTime?>> SelectedTimeChanged
7373
static TimePicker()
7474
{
7575
EventManager.RegisterClassHandler(typeof(TimePicker), GotFocusEvent, new RoutedEventHandler(OnGotFocus));
76-
KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(TimePicker), new FrameworkPropertyMetadata(KeyboardNavigationMode.Once));
77-
KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(TimePicker), new FrameworkPropertyMetadata(ValueBoxes.FalseBox));
76+
KeyboardNavigation.TabNavigationProperty.OverrideMetadata(typeof(TimePicker),
77+
new FrameworkPropertyMetadata(KeyboardNavigationMode.Once));
78+
KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(TimePicker),
79+
new FrameworkPropertyMetadata(ValueBoxes.FalseBox));
7880
}
7981

8082
public TimePicker()
@@ -115,7 +117,8 @@ public DateTime DisplayTime
115117
nameof(DisplayTime),
116118
typeof(DateTime),
117119
typeof(TimePicker),
118-
new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null, CoerceDisplayTime));
120+
new FrameworkPropertyMetadata(DateTime.Now, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, null,
121+
CoerceDisplayTime));
119122

120123
private static object CoerceDisplayTime(DependencyObject d, object value)
121124
{
@@ -139,7 +142,8 @@ public bool IsDropDownOpen
139142
nameof(IsDropDownOpen),
140143
typeof(bool),
141144
typeof(TimePicker),
142-
new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen));
145+
new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
146+
OnIsDropDownOpenChanged, OnCoerceIsDropDownOpen));
143147

144148
private static object OnCoerceIsDropDownOpen(DependencyObject d, object baseValue)
145149
{
@@ -183,7 +187,8 @@ public DateTime? SelectedTime
183187
nameof(SelectedTime),
184188
typeof(DateTime?),
185189
typeof(TimePicker),
186-
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnSelectedTimeChanged, CoerceSelectedTime));
190+
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
191+
OnSelectedTimeChanged, CoerceSelectedTime));
187192

188193
private static void OnSelectedTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
189194
{
@@ -194,6 +199,10 @@ private static void OnSelectedTimeChanged(DependencyObject d, DependencyProperty
194199
var time = dp.SelectedTime.Value;
195200
dp.SetTextInternal(dp.DateTimeToString(time));
196201
}
202+
else
203+
{
204+
dp.SetTextInternal(string.Empty);
205+
}
197206

198207
dp.RaiseEvent(new FunctionEventArgs<DateTime?>(SelectedTimeChangedEvent, dp)
199208
{
@@ -306,7 +315,9 @@ public Brush CaretBrush
306315
}
307316

308317
public static readonly DependencyProperty ClockProperty = DependencyProperty.Register(
309-
nameof(Clock), typeof(ClockBase), typeof(TimePicker), new FrameworkPropertyMetadata(default(Clock), FrameworkPropertyMetadataOptions.NotDataBindable, OnClockChanged));
318+
nameof(Clock), typeof(ClockBase), typeof(TimePicker),
319+
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.NotDataBindable,
320+
OnClockChanged));
310321

311322
private static void OnClockChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
312323
{
@@ -384,7 +395,8 @@ public override void OnApplyTemplate()
384395
{
385396
_textBox.SetBinding(SelectionBrushProperty, new Binding(SelectionBrushProperty.Name) { Source = this });
386397
#if !(NET40 || NET45 || NET451 || NET452 || NET46 || NET461 || NET462 || NET47 || NET471 || NET472)
387-
_textBox.SetBinding(SelectionTextBrushProperty, new Binding(SelectionTextBrushProperty.Name) { Source = this });
398+
_textBox.SetBinding(SelectionTextBrushProperty,
399+
new Binding(SelectionTextBrushProperty.Name) { Source = this });
388400
#endif
389401
_textBox.SetBinding(SelectionOpacityProperty, new Binding(SelectionOpacityProperty.Name) { Source = this });
390402
_textBox.SetBinding(CaretBrushProperty, new Binding(CaretBrushProperty.Name) { Source = this });
@@ -488,29 +500,29 @@ private bool ProcessTimePickerKey(KeyEventArgs e)
488500
switch (e.Key)
489501
{
490502
case Key.System:
503+
{
504+
switch (e.SystemKey)
491505
{
492-
switch (e.SystemKey)
506+
case Key.Down:
493507
{
494-
case Key.Down:
495-
{
496-
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
497-
{
498-
TogglePopup();
499-
return true;
500-
}
501-
502-
break;
503-
}
504-
}
508+
if ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
509+
{
510+
TogglePopup();
511+
return true;
512+
}
505513

506-
break;
514+
break;
515+
}
507516
}
508517

518+
break;
519+
}
520+
509521
case Key.Enter:
510-
{
511-
SetSelectedTime();
512-
return true;
513-
}
522+
{
523+
SetSelectedTime();
524+
return true;
525+
}
514526
}
515527

516528
return false;
@@ -635,10 +647,10 @@ private void SafeSetText(string s)
635647

636648
if (SelectedTime != null)
637649
{
638-
var newtext = DateTimeToString((DateTime) SelectedTime);
639-
SafeSetText(newtext);
650+
SafeSetText(DateTimeToString((DateTime) SelectedTime));
640651
return SelectedTime;
641652
}
653+
642654
SafeSetText(DateTimeToString(DisplayTime));
643655
return DisplayTime;
644656
}
@@ -662,7 +674,7 @@ private void SetSelectedTime()
662674
}
663675

664676
var d = SetTextBoxValue(s);
665-
if (!SelectedTime.Equals(d))
677+
if (!Equals(SelectedTime, d))
666678
{
667679
SetCurrentValue(SelectedTimeProperty, d);
668680
SetCurrentValue(DisplayTimeProperty, d);
@@ -674,12 +686,16 @@ private void SetSelectedTime()
674686
{
675687
SetCurrentValue(SelectedTimeProperty, null);
676688
}
689+
else
690+
{
691+
SetTextInternal(string.Empty);
692+
}
677693
}
678694
}
679695
else
680696
{
681697
var d = SetTextBoxValue(_defaultText);
682-
if (!SelectedTime.Equals(d))
698+
if (!Equals(SelectedTime, d))
683699
{
684700
SetCurrentValue(SelectedTimeProperty, d);
685701
}

0 commit comments

Comments
 (0)