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.
This commit is contained in:
NaBian committed 2025-11-12 21:36:38 +08:00
1 parent d7b4361c49
commit dd6c83a535
2 files changed
+80 -57

No files matched your search

@@ -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<DateTime?> e) => SelectedDateTime = e.Info;
private void CalendarWithClock_SelectedDateTimeChanged(object sender, FunctionEventArgs<DateTime?> 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);
@@ -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<DateTime?>(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);
}