From 68f6fdc469d53a2b0662ea20a8242133e2b30717 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 26 Jun 2024 00:33:42 +0800 Subject: [PATCH] feat: disable calendar reset on focus temporarily. This will be fixed after 11.1 --- .../Controls/DateTimePicker/CalendarContext.cs | 6 ++++++ src/Ursa/Controls/DateTimePicker/CalendarView.cs | 6 ++++-- .../Controls/DateTimePicker/DateRangePicker.cs | 14 ++++++++------ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/Ursa/Controls/DateTimePicker/CalendarContext.cs b/src/Ursa/Controls/DateTimePicker/CalendarContext.cs index a0d8943..f2eb957 100644 --- a/src/Ursa/Controls/DateTimePicker/CalendarContext.cs +++ b/src/Ursa/Controls/DateTimePicker/CalendarContext.cs @@ -82,4 +82,10 @@ public sealed class CalendarContext(int? year = null, int? month = null, int? st if (yearComparison != 0) return yearComparison; return Nullable.Compare(Month, other.Month); } + + public override string ToString() + { + return + $"Start: {StartYear?.ToString() ?? "null"}, End: {EndYear?.ToString() ?? "null"}, Year: {Year?.ToString() ?? "null"}, Month: {Month?.ToString() ?? "null"}"; + } } \ No newline at end of file diff --git a/src/Ursa/Controls/DateTimePicker/CalendarView.cs b/src/Ursa/Controls/DateTimePicker/CalendarView.cs index 14e4abc..290fc7f 100644 --- a/src/Ursa/Controls/DateTimePicker/CalendarView.cs +++ b/src/Ursa/Controls/DateTimePicker/CalendarView.cs @@ -1,4 +1,5 @@ -using System.Globalization; +using System.Diagnostics; +using System.Globalization; using System.Runtime.CompilerServices; using Avalonia; using Avalonia.Controls; @@ -81,6 +82,7 @@ public class CalendarView : TemplatedControl private void OnContextDateChanged(AvaloniaPropertyChangedEventArgs args) { + Debug.WriteLine(this.Name + " " + args.NewValue.Value); if (!_dateContextSyncing) { ContextDateChanged?.Invoke(this, args.NewValue.Value); @@ -317,7 +319,7 @@ public class CalendarView : TemplatedControl if (_monthGrid is null || Mode != CalendarViewMode.Month) return; var children = _monthGrid.Children; var info = DateTimeHelper.GetCurrentDateTimeFormatInfo(); - var date = new DateTime(ContextDate.Year.Value, ContextDate.Month.Value, 1); + var date = new DateTime(ContextDate.Year ?? ContextDate.StartYear.Value, ContextDate.Month.Value, 1); var dayBefore = PreviousMonthDays(date); var dateToSet = date.GetFirstDayOfMonth().AddDays(-dayBefore); for (var i = 7; i < children.Count; i++) diff --git a/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs b/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs index 90b5e31..fe87b7e 100644 --- a/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs +++ b/src/Ursa/Controls/DateTimePicker/DateRangePicker.cs @@ -148,7 +148,7 @@ public class DateRangePicker : DatePickerBase private void OnContextDateChanged(object sender, CalendarContext e) { - if(sender == _startCalendar) + if(sender == _startCalendar && _startCalendar?.Mode == CalendarViewMode.Month) { bool needsUpdate = EnableMonthSync || _startCalendar?.ContextDate.CompareTo(_endCalendar?.ContextDate) >= 0; if (needsUpdate) @@ -156,7 +156,7 @@ public class DateRangePicker : DatePickerBase _endCalendar?.SyncContextDate(_startCalendar?.ContextDate.NextMonth()); } } - else if(sender == _endCalendar) + else if(sender == _endCalendar && _endCalendar?.Mode == CalendarViewMode.Month) { bool needsUpdate = EnableMonthSync || _endCalendar?.ContextDate.CompareTo(_startCalendar?.ContextDate) <= 0; if (needsUpdate) @@ -324,6 +324,7 @@ public class DateRangePicker : DatePickerBase { var date1 = SelectedStartDate ?? DateTime.Today; _startCalendar.ContextDate = new CalendarContext(date1.Year, date.Month); + //_startCalendar.SyncContextDate(new CalendarContext(date1.Year, date1.Month)); _startCalendar.UpdateDayButtons(); _startCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd); } @@ -332,6 +333,7 @@ public class DateRangePicker : DatePickerBase var date2 = SelectedEndDate ?? SelectedStartDate ?? DateTime.Today; if (SelectedEndDate is null) date2 = date2.AddMonths(1); _endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month); + //_endCalendar.SyncContextDate(new CalendarContext(date2.Year, date2.Month)); _endCalendar.UpdateDayButtons(); _endCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd); } @@ -344,16 +346,16 @@ public class DateRangePicker : DatePickerBase if (_startCalendar is not null && _startCalendar?.Mode == CalendarViewMode.Month) { var date = SelectedStartDate ?? DateTime.Today; - _startCalendar.ContextDate = new CalendarContext(date.Year, date.Month); - _startCalendar.UpdateDayButtons(); + //_startCalendar.ContextDate = new CalendarContext(date.Year, date.Month); + //_startCalendar.UpdateDayButtons(); } if (_endCalendar is not null && _endCalendar?.Mode == CalendarViewMode.Month) { var date2 = SelectedStartDate ?? DateTime.Today; date2 = date2.AddMonths(1); - _endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month); - _endCalendar.UpdateDayButtons(); + //_endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month); + //_endCalendar.UpdateDayButtons(); } SetCurrentValue(IsDropdownOpenProperty, true); }