@@ -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 ) ;
0 commit comments