feat: disable calendar reset on focus temporarily. This will be fixed after 11.1

This commit is contained in:
rabbitism
2024-06-26 00:33:42 +08:00
parent a459205d78
commit 68f6fdc469
3 changed files with 18 additions and 8 deletions

View File

@@ -82,4 +82,10 @@ public sealed class CalendarContext(int? year = null, int? month = null, int? st
if (yearComparison != 0) return yearComparison; if (yearComparison != 0) return yearComparison;
return Nullable.Compare(Month, other.Month); 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"}";
}
} }

View File

@@ -1,4 +1,5 @@
using System.Globalization; using System.Diagnostics;
using System.Globalization;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
@@ -81,6 +82,7 @@ public class CalendarView : TemplatedControl
private void OnContextDateChanged(AvaloniaPropertyChangedEventArgs<CalendarContext> args) private void OnContextDateChanged(AvaloniaPropertyChangedEventArgs<CalendarContext> args)
{ {
Debug.WriteLine(this.Name + " " + args.NewValue.Value);
if (!_dateContextSyncing) if (!_dateContextSyncing)
{ {
ContextDateChanged?.Invoke(this, args.NewValue.Value); ContextDateChanged?.Invoke(this, args.NewValue.Value);
@@ -317,7 +319,7 @@ public class CalendarView : TemplatedControl
if (_monthGrid is null || Mode != CalendarViewMode.Month) return; if (_monthGrid is null || Mode != CalendarViewMode.Month) return;
var children = _monthGrid.Children; var children = _monthGrid.Children;
var info = DateTimeHelper.GetCurrentDateTimeFormatInfo(); 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 dayBefore = PreviousMonthDays(date);
var dateToSet = date.GetFirstDayOfMonth().AddDays(-dayBefore); var dateToSet = date.GetFirstDayOfMonth().AddDays(-dayBefore);
for (var i = 7; i < children.Count; i++) for (var i = 7; i < children.Count; i++)

View File

@@ -148,7 +148,7 @@ public class DateRangePicker : DatePickerBase
private void OnContextDateChanged(object sender, CalendarContext e) 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; bool needsUpdate = EnableMonthSync || _startCalendar?.ContextDate.CompareTo(_endCalendar?.ContextDate) >= 0;
if (needsUpdate) if (needsUpdate)
@@ -156,7 +156,7 @@ public class DateRangePicker : DatePickerBase
_endCalendar?.SyncContextDate(_startCalendar?.ContextDate.NextMonth()); _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; bool needsUpdate = EnableMonthSync || _endCalendar?.ContextDate.CompareTo(_startCalendar?.ContextDate) <= 0;
if (needsUpdate) if (needsUpdate)
@@ -324,6 +324,7 @@ public class DateRangePicker : DatePickerBase
{ {
var date1 = SelectedStartDate ?? DateTime.Today; var date1 = SelectedStartDate ?? DateTime.Today;
_startCalendar.ContextDate = new CalendarContext(date1.Year, date.Month); _startCalendar.ContextDate = new CalendarContext(date1.Year, date.Month);
//_startCalendar.SyncContextDate(new CalendarContext(date1.Year, date1.Month));
_startCalendar.UpdateDayButtons(); _startCalendar.UpdateDayButtons();
_startCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd); _startCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd);
} }
@@ -332,6 +333,7 @@ public class DateRangePicker : DatePickerBase
var date2 = SelectedEndDate ?? SelectedStartDate ?? DateTime.Today; var date2 = SelectedEndDate ?? SelectedStartDate ?? DateTime.Today;
if (SelectedEndDate is null) date2 = date2.AddMonths(1); if (SelectedEndDate is null) date2 = date2.AddMonths(1);
_endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month); _endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month);
//_endCalendar.SyncContextDate(new CalendarContext(date2.Year, date2.Month));
_endCalendar.UpdateDayButtons(); _endCalendar.UpdateDayButtons();
_endCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd); _endCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd);
} }
@@ -344,16 +346,16 @@ public class DateRangePicker : DatePickerBase
if (_startCalendar is not null && _startCalendar?.Mode == CalendarViewMode.Month) if (_startCalendar is not null && _startCalendar?.Mode == CalendarViewMode.Month)
{ {
var date = SelectedStartDate ?? DateTime.Today; var date = SelectedStartDate ?? DateTime.Today;
_startCalendar.ContextDate = new CalendarContext(date.Year, date.Month); //_startCalendar.ContextDate = new CalendarContext(date.Year, date.Month);
_startCalendar.UpdateDayButtons(); //_startCalendar.UpdateDayButtons();
} }
if (_endCalendar is not null && _endCalendar?.Mode == CalendarViewMode.Month) if (_endCalendar is not null && _endCalendar?.Mode == CalendarViewMode.Month)
{ {
var date2 = SelectedStartDate ?? DateTime.Today; var date2 = SelectedStartDate ?? DateTime.Today;
date2 = date2.AddMonths(1); date2 = date2.AddMonths(1);
_endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month); //_endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month);
_endCalendar.UpdateDayButtons(); //_endCalendar.UpdateDayButtons();
} }
SetCurrentValue(IsDropdownOpenProperty, true); SetCurrentValue(IsDropdownOpenProperty, true);
} }