2using Microsoft.Maui.Controls;
13 private bool settingDate;
16 private static readonly DateTime SafeMinDate =
new DateTime(1900, 1, 1);
17 private static readonly DateTime SafeMaxDate =
new DateTime(2100, 12, 31);
20 DateTime? IDatePicker.Date
31 if (this.Date is
null)
34 this.settingDate =
true;
41 this.settingDate =
false;
48 DateTime sanitized = value.Value.SanitizeForDatePicker(SafeMinDate, SafeMaxDate);
51 if (this.Date.HasValue &&
this.Date.Value == sanitized)
54 this.settingDate =
true;
58 if (!this.MinimumDate.HasValue ||
this.MinimumDate.Value < SafeMinDate)
59 this.MinimumDate = SafeMinDate;
61 if (!this.MaximumDate.HasValue ||
this.MaximumDate.Value > SafeMaxDate)
62 this.MaximumDate = SafeMaxDate;
64 if (sanitized < this.MinimumDate)
65 sanitized = this.MinimumDate.Value;
66 else if (sanitized > this.MaximumDate)
67 sanitized = this.MaximumDate.Value;
69 this.Date = sanitized;
73 this.settingDate =
false;
83 base.OnHandlerChanged();
86 if (!this.MinimumDate.HasValue ||
this.MinimumDate == DateTime.MinValue ||
this.MinimumDate < SafeMinDate)
87 this.MinimumDate = SafeMinDate;
89 if (!this.MaximumDate.HasValue ||
this.MaximumDate == DateTime.MaxValue ||
this.MaximumDate > SafeMaxDate)
90 this.MaximumDate = SafeMaxDate;
93 if (this.Date is DateTime currentValue)
95 DateTime current = currentValue.SanitizeForDatePicker(SafeMinDate, SafeMaxDate);
97 if (current < this.MinimumDate)
98 current = this.MinimumDate.Value;
99 else if (current > this.MaximumDate)
100 current = this.MaximumDate.Value;
102 if (current != currentValue)
DatePicker wrapper preventing redundant reentrant Date updates and guarding against invalid extreme d...
override void OnHandlerChanged()
When handler is created, normalize min/max to safe values to prevent implicit DateTimeOffset construc...