feat: simplify mechanism.
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
|
||||||
x:Class="Ursa.Demo.Pages.DatePickerDemo">
|
x:Class="Ursa.Demo.Pages.DatePickerDemo">
|
||||||
<StackPanel Margin="20" HorizontalAlignment="Left">
|
<StackPanel Margin="20" HorizontalAlignment="Left">
|
||||||
<u:CalendarView OnDateSelected="CalendarView_OnOnDateSelected" OnDatePreviewed="CalendarView_OnOnDatePreviewed"/>
|
<u:CalendarView DateSelected="CalendarView_OnOnDateSelected" DatePreviewed="CalendarView_OnOnDatePreviewed"/>
|
||||||
<TextBlock Text="{Binding #singlePicker.SelectedDate}" ></TextBlock>
|
<TextBlock Text="{Binding #singlePicker.SelectedDate}" ></TextBlock>
|
||||||
<u:DatePicker Name="singlePicker" Width="200" />
|
<u:DatePicker Name="singlePicker" Width="200" />
|
||||||
<u:DateRangePicker Width="300" DisplayFormat="yyyyMMdd" />
|
<u:DateRangePicker Width="300" DisplayFormat="yyyyMMdd" />
|
||||||
|
|||||||
@@ -1,21 +1,67 @@
|
|||||||
namespace Ursa.Controls;
|
namespace Ursa.Controls;
|
||||||
|
|
||||||
public class CalendarContext(int? year = null, int? month = null, int? day = null)
|
public sealed class CalendarContext(int? year = null, int? month = null, int? startYear = null, int? endYear = null)
|
||||||
{
|
{
|
||||||
public int? Year = year;
|
public int? Year { get; } = year;
|
||||||
public int? Month = month;
|
public int? Month { get; } = month;
|
||||||
public int? Day = day;
|
public int? StartYear { get; } = startYear;
|
||||||
public int? StartYear;
|
public int? EndYear { get; } = endYear;
|
||||||
public int? EndYear;
|
|
||||||
|
|
||||||
|
|
||||||
public CalendarContext Clone()
|
public CalendarContext Clone()
|
||||||
{
|
{
|
||||||
return new CalendarContext(Year, Month, Day) { StartYear = StartYear, EndYear = EndYear };
|
return new CalendarContext(Year, Month, StartYear, EndYear);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CalendarContext Today()
|
public static CalendarContext Today()
|
||||||
{
|
{
|
||||||
return new CalendarContext(DateTime.Today.Year, DateTime.Today.Month, 1);
|
return new CalendarContext(DateTime.Today.Year, DateTime.Today.Month);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarContext With(int? year = null, int? month = null, int? startYear = null, int? endYear = null)
|
||||||
|
{
|
||||||
|
return new CalendarContext(year ?? Year, month ?? Month, startYear ?? StartYear, endYear ?? EndYear);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarContext NextMonth()
|
||||||
|
{
|
||||||
|
var year = Year;
|
||||||
|
var month = Month;
|
||||||
|
if (month == 12)
|
||||||
|
{
|
||||||
|
year++;
|
||||||
|
month = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
month++;
|
||||||
|
}
|
||||||
|
return new CalendarContext(year, month, StartYear, EndYear);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarContext PreviousMonth()
|
||||||
|
{
|
||||||
|
var year = Year;
|
||||||
|
var month = Month;
|
||||||
|
if (month == 1)
|
||||||
|
{
|
||||||
|
year--;
|
||||||
|
month = 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
month--;
|
||||||
|
}
|
||||||
|
return new CalendarContext(year, month, StartYear, EndYear);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarContext NextYear()
|
||||||
|
{
|
||||||
|
return new CalendarContext(Year + 1, Month, StartYear, EndYear);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CalendarContext PreviousYear()
|
||||||
|
{
|
||||||
|
return new CalendarContext(Year - 1, Month, StartYear, EndYear);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,15 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
view.PseudoClasses.Set(PC_Month, args.NewValue.Value == CalendarViewMode.Month);
|
view.PseudoClasses.Set(PC_Month, args.NewValue.Value == CalendarViewMode.Month);
|
||||||
});
|
});
|
||||||
|
ContextDateProperty.Changed.AddClassHandler<CalendarView, CalendarContext>((view, args) =>
|
||||||
|
view.OnContextDateChanged(args));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnContextDateChanged(AvaloniaPropertyChangedEventArgs<CalendarContext> args)
|
||||||
|
{
|
||||||
|
ContextDateChanged?.Invoke(this, args.NewValue.Value);
|
||||||
|
//UpdateDayButtons();
|
||||||
|
//UpdateYearButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal CalendarViewMode Mode
|
internal CalendarViewMode Mode
|
||||||
@@ -83,7 +92,16 @@ public class CalendarView : TemplatedControl
|
|||||||
set => SetAndRaise(ModeProperty, ref _mode, value);
|
set => SetAndRaise(ModeProperty, ref _mode, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CalendarContext ContextCalendar { get; set; } = new();
|
private CalendarContext _contextDate = new();
|
||||||
|
|
||||||
|
public static readonly DirectProperty<CalendarView, CalendarContext> ContextDateProperty = AvaloniaProperty.RegisterDirect<CalendarView, CalendarContext>(
|
||||||
|
nameof(ContextDate), o => o.ContextDate, (o, v) => o.ContextDate = v);
|
||||||
|
|
||||||
|
public CalendarContext ContextDate
|
||||||
|
{
|
||||||
|
get => _contextDate;
|
||||||
|
internal set => SetAndRaise(ContextDateProperty, ref _contextDate, value);
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsTodayHighlighted
|
public bool IsTodayHighlighted
|
||||||
{
|
{
|
||||||
@@ -97,8 +115,9 @@ public class CalendarView : TemplatedControl
|
|||||||
set => SetValue(FirstDayOfWeekProperty, value);
|
set => SetValue(FirstDayOfWeekProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public event EventHandler<CalendarDayButtonEventArgs>? OnDateSelected;
|
public event EventHandler<CalendarDayButtonEventArgs>? DateSelected;
|
||||||
public event EventHandler<CalendarDayButtonEventArgs>? OnDatePreviewed;
|
public event EventHandler<CalendarDayButtonEventArgs>? DatePreviewed;
|
||||||
|
internal event EventHandler<CalendarContext>? ContextDateChanged;
|
||||||
|
|
||||||
private void OnFirstDayOfWeekChanged(AvaloniaPropertyChangedEventArgs<DayOfWeek> args)
|
private void OnFirstDayOfWeekChanged(AvaloniaPropertyChangedEventArgs<DayOfWeek> args)
|
||||||
{
|
{
|
||||||
@@ -136,7 +155,7 @@ public class CalendarView : TemplatedControl
|
|||||||
Button.ClickEvent.AddHandler(OnNext, _nextButton);
|
Button.ClickEvent.AddHandler(OnNext, _nextButton);
|
||||||
Button.ClickEvent.AddHandler(OnFastNext, _fastNextButton);
|
Button.ClickEvent.AddHandler(OnFastNext, _fastNextButton);
|
||||||
|
|
||||||
ContextCalendar = new CalendarContext(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day);
|
ContextDate = new CalendarContext(DateTime.Today.Year, DateTime.Today.Month);
|
||||||
PseudoClasses.Set(PC_Month, Mode == CalendarViewMode.Month);
|
PseudoClasses.Set(PC_Month, Mode == CalendarViewMode.Month);
|
||||||
InitializeGridButtons();
|
InitializeGridButtons();
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
@@ -147,7 +166,7 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (Mode == CalendarViewMode.Month)
|
if (Mode == CalendarViewMode.Month)
|
||||||
{
|
{
|
||||||
ContextCalendar.Year += 1;
|
ContextDate = ContextDate.With(year: ContextDate.Year + 1);
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -156,30 +175,22 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (Mode == CalendarViewMode.Month)
|
if (Mode == CalendarViewMode.Month)
|
||||||
{
|
{
|
||||||
ContextCalendar.Month += 1;
|
ContextDate = ContextDate.NextMonth();
|
||||||
if (ContextCalendar.Month > 12)
|
|
||||||
{
|
|
||||||
ContextCalendar.Month = 1;
|
|
||||||
ContextCalendar.Year += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Year)
|
else if (Mode == CalendarViewMode.Year)
|
||||||
{
|
{
|
||||||
ContextCalendar.Year += 1;
|
ContextDate = ContextDate.NextYear();
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Decade)
|
else if (Mode == CalendarViewMode.Decade)
|
||||||
{
|
{
|
||||||
ContextCalendar.StartYear += 10;
|
ContextDate = ContextDate.With(startYear: ContextDate.StartYear + 10, endYear: ContextDate.EndYear + 10);
|
||||||
ContextCalendar.EndYear += 10;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Century)
|
else if (Mode == CalendarViewMode.Century)
|
||||||
{
|
{
|
||||||
ContextCalendar.StartYear += 100;
|
ContextDate = ContextDate.With(startYear: ContextDate.StartYear + 100, endYear: ContextDate.EndYear + 100);
|
||||||
ContextCalendar.EndYear += 100;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -188,30 +199,22 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (Mode == CalendarViewMode.Month)
|
if (Mode == CalendarViewMode.Month)
|
||||||
{
|
{
|
||||||
ContextCalendar.Month -= 1;
|
ContextDate = ContextDate.PreviousMonth();
|
||||||
if (ContextCalendar.Month < 1)
|
|
||||||
{
|
|
||||||
ContextCalendar.Month = 12;
|
|
||||||
ContextCalendar.Year -= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Year)
|
else if (Mode == CalendarViewMode.Year)
|
||||||
{
|
{
|
||||||
ContextCalendar.Year -= 1;
|
ContextDate = ContextDate.With(year: ContextDate.Year - 1);
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Decade)
|
else if (Mode == CalendarViewMode.Decade)
|
||||||
{
|
{
|
||||||
ContextCalendar.StartYear -= 10;
|
ContextDate = ContextDate.With(startYear: ContextDate.StartYear - 10, endYear: ContextDate.EndYear - 10);
|
||||||
ContextCalendar.EndYear -= 10;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Century)
|
else if (Mode == CalendarViewMode.Century)
|
||||||
{
|
{
|
||||||
ContextCalendar.StartYear -= 100;
|
ContextDate = ContextDate.With(startYear: ContextDate.StartYear - 100, endYear: ContextDate.EndYear - 100);
|
||||||
ContextCalendar.EndYear -= 100;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -220,7 +223,7 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (Mode == CalendarViewMode.Month)
|
if (Mode == CalendarViewMode.Month)
|
||||||
{
|
{
|
||||||
ContextCalendar.Year -= 1;
|
ContextDate = ContextDate.PreviousYear();
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -237,9 +240,8 @@ public class CalendarView : TemplatedControl
|
|||||||
if (Mode == CalendarViewMode.Year)
|
if (Mode == CalendarViewMode.Year)
|
||||||
{
|
{
|
||||||
Mode = CalendarViewMode.Decade;
|
Mode = CalendarViewMode.Decade;
|
||||||
var range = DateTimeHelper.GetDecadeViewRangeByYear(ContextCalendar.Year!.Value);
|
var range = DateTimeHelper.GetDecadeViewRangeByYear(ContextDate.Year!.Value);
|
||||||
ContextCalendar.StartYear = range.start;
|
ContextDate = ContextDate.With(startYear: range.start, endYear: range.end);
|
||||||
ContextCalendar.EndYear = range.end;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -247,9 +249,8 @@ public class CalendarView : TemplatedControl
|
|||||||
if (Mode == CalendarViewMode.Decade)
|
if (Mode == CalendarViewMode.Decade)
|
||||||
{
|
{
|
||||||
Mode = CalendarViewMode.Century;
|
Mode = CalendarViewMode.Century;
|
||||||
var range = DateTimeHelper.GetCenturyViewRangeByYear(ContextCalendar.StartYear!.Value);
|
var range = DateTimeHelper.GetCenturyViewRangeByYear(ContextDate.StartYear!.Value);
|
||||||
ContextCalendar.StartYear = range.start;
|
ContextDate = ContextDate.With(startYear: range.start, endYear: range.end);
|
||||||
ContextCalendar.EndYear = range.end;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -309,7 +310,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(ContextCalendar.Year.Value, ContextCalendar.Month.Value, ContextCalendar.Day.Value);
|
var date = new DateTime(ContextDate.Year.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++)
|
||||||
@@ -332,7 +333,7 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (_yearGrid is null) return;
|
if (_yearGrid is null) return;
|
||||||
var mode = Mode;
|
var mode = Mode;
|
||||||
var contextDate = ContextCalendar;
|
var contextDate = ContextDate;
|
||||||
if (mode == CalendarViewMode.Century && contextDate.StartYear.HasValue)
|
if (mode == CalendarViewMode.Century && contextDate.StartYear.HasValue)
|
||||||
{
|
{
|
||||||
var range = DateTimeHelper.GetCenturyViewRangeByYear(contextDate.StartYear.Value);
|
var range = DateTimeHelper.GetCenturyViewRangeByYear(contextDate.StartYear.Value);
|
||||||
@@ -341,7 +342,7 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
var child = _yearGrid.Children[i] as CalendarYearButton;
|
var child = _yearGrid.Children[i] as CalendarYearButton;
|
||||||
child?.SetContext(CalendarViewMode.Century,
|
child?.SetContext(CalendarViewMode.Century,
|
||||||
new CalendarContext { StartYear = start, EndYear = start + 10 });
|
new CalendarContext(startYear: start, endYear: start + 10));
|
||||||
start += 10;
|
start += 10;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -353,7 +354,7 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
var child = _yearGrid.Children[i] as CalendarYearButton;
|
var child = _yearGrid.Children[i] as CalendarYearButton;
|
||||||
child?.SetContext(CalendarViewMode.Decade,
|
child?.SetContext(CalendarViewMode.Decade,
|
||||||
new CalendarContext { Year = year });
|
new CalendarContext(year: year));
|
||||||
year++;
|
year++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -362,7 +363,7 @@ public class CalendarView : TemplatedControl
|
|||||||
for (var i = 0; i < 12; i++)
|
for (var i = 0; i < 12; i++)
|
||||||
{
|
{
|
||||||
var child = _yearGrid.Children[i] as CalendarYearButton;
|
var child = _yearGrid.Children[i] as CalendarYearButton;
|
||||||
child?.SetContext(CalendarViewMode.Year, new CalendarContext { Month = i+1 });
|
child?.SetContext(CalendarViewMode.Year, new CalendarContext(month: i + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UpdateHeaderButtons();
|
UpdateHeaderButtons();
|
||||||
@@ -374,7 +375,7 @@ public class CalendarView : TemplatedControl
|
|||||||
var children = _monthGrid.Children;
|
var children = _monthGrid.Children;
|
||||||
for (var i = 7; i < children.Count; i++)
|
for (var i = 7; i < children.Count; i++)
|
||||||
if (children[i] is CalendarDayButton { DataContext: DateTime d } button)
|
if (children[i] is CalendarDayButton { DataContext: DateTime d } button)
|
||||||
button.IsNotCurrentMonth = d.Month != ContextCalendar.Month;
|
button.IsNotCurrentMonth = d.Month != ContextDate.Month;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateMonthViewHeader(DayOfWeek day)
|
private void UpdateMonthViewHeader(DayOfWeek day)
|
||||||
@@ -404,20 +405,17 @@ public class CalendarView : TemplatedControl
|
|||||||
|
|
||||||
private void OnCellDatePreviewed(object sender, CalendarDayButtonEventArgs e)
|
private void OnCellDatePreviewed(object sender, CalendarDayButtonEventArgs e)
|
||||||
{
|
{
|
||||||
OnDatePreviewed?.Invoke(this, e);
|
DatePreviewed?.Invoke(this, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCellDateSelected(object sender, CalendarDayButtonEventArgs e)
|
private void OnCellDateSelected(object sender, CalendarDayButtonEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Date.HasValue && e.Date.Value.Month != ContextCalendar.Month)
|
if (e.Date.HasValue && e.Date.Value.Month != ContextDate.Month)
|
||||||
{
|
{
|
||||||
ContextCalendar.Month = e.Date.Value.Month;
|
ContextDate = ContextDate.With(year: e.Date.Value.Year, month: e.Date.Value.Month);
|
||||||
ContextCalendar.Year = e.Date.Value.Year;
|
|
||||||
ContextCalendar.Day = 1;
|
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
}
|
}
|
||||||
|
DateSelected?.Invoke(this, e);
|
||||||
OnDateSelected?.Invoke(this, e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -440,9 +438,8 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (_yearGrid is null) return;
|
if (_yearGrid is null) return;
|
||||||
SetCurrentValue(ModeProperty, CalendarViewMode.Decade);
|
SetCurrentValue(ModeProperty, CalendarViewMode.Decade);
|
||||||
var range = DateTimeHelper.GetDecadeViewRangeByYear(ContextCalendar.Year!.Value);
|
var range = DateTimeHelper.GetDecadeViewRangeByYear(ContextDate.Year!.Value);
|
||||||
ContextCalendar.StartYear = range.start;
|
ContextDate = ContextDate.With(startYear: range.start, endYear: range.end);
|
||||||
ContextCalendar.EndYear = range.end;
|
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,31 +460,23 @@ public class CalendarView : TemplatedControl
|
|||||||
if (Mode == CalendarViewMode.Century)
|
if (Mode == CalendarViewMode.Century)
|
||||||
{
|
{
|
||||||
Mode = CalendarViewMode.Decade;
|
Mode = CalendarViewMode.Decade;
|
||||||
ContextCalendar.Year = null;
|
ContextDate = e.Context.With(year: null);
|
||||||
ContextCalendar.StartYear = e.Context.StartYear;
|
|
||||||
ContextCalendar.EndYear = e.Context.EndYear;
|
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Decade)
|
else if (Mode == CalendarViewMode.Decade)
|
||||||
{
|
{
|
||||||
Mode = CalendarViewMode.Year;
|
Mode = CalendarViewMode.Year;
|
||||||
ContextCalendar.Year = e.Context.Year;
|
ContextDate = e.Context.Clone();
|
||||||
ContextCalendar.StartYear = e.Context.StartYear;
|
|
||||||
ContextCalendar.EndYear = e.Context.EndYear;
|
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Year)
|
else if (Mode == CalendarViewMode.Year)
|
||||||
{
|
{
|
||||||
Mode = CalendarViewMode.Month;
|
Mode = CalendarViewMode.Month;
|
||||||
ContextCalendar.StartYear = null;
|
ContextDate = ContextDate.With(null, e.Context.Month, null, null);
|
||||||
ContextCalendar.EndYear = null;
|
|
||||||
// ContextCalendar.Year = e.Context.Year;
|
|
||||||
ContextCalendar.Month = e.Context.Month;
|
|
||||||
UpdateDayButtons();
|
UpdateDayButtons();
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Month)
|
else if (Mode == CalendarViewMode.Month)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateHeaderButtons();
|
UpdateHeaderButtons();
|
||||||
UpdateYearButtons();
|
UpdateYearButtons();
|
||||||
}
|
}
|
||||||
@@ -500,7 +489,7 @@ public class CalendarView : TemplatedControl
|
|||||||
IsVisibleProperty.SetValue(false, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
IsVisibleProperty.SetValue(false, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
||||||
_fastNextButton);
|
_fastNextButton);
|
||||||
_headerButton?.SetValue(ContentControl.ContentProperty,
|
_headerButton?.SetValue(ContentControl.ContentProperty,
|
||||||
ContextCalendar.StartYear + "-" + ContextCalendar.EndYear);
|
ContextDate.StartYear + "-" + ContextDate.EndYear);
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Decade)
|
else if (Mode == CalendarViewMode.Decade)
|
||||||
{
|
{
|
||||||
@@ -508,14 +497,14 @@ public class CalendarView : TemplatedControl
|
|||||||
IsVisibleProperty.SetValue(false, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
IsVisibleProperty.SetValue(false, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
||||||
_fastNextButton);
|
_fastNextButton);
|
||||||
_headerButton?.SetValue(ContentControl.ContentProperty,
|
_headerButton?.SetValue(ContentControl.ContentProperty,
|
||||||
ContextCalendar.StartYear + "-" + ContextCalendar.EndYear);
|
ContextDate.StartYear + "-" + ContextDate.EndYear);
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Year)
|
else if (Mode == CalendarViewMode.Year)
|
||||||
{
|
{
|
||||||
IsVisibleProperty.SetValue(true, _headerButton, _yearGrid);
|
IsVisibleProperty.SetValue(true, _headerButton, _yearGrid);
|
||||||
IsVisibleProperty.SetValue(false, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
IsVisibleProperty.SetValue(false, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
||||||
_fastNextButton);
|
_fastNextButton);
|
||||||
_headerButton?.SetValue(ContentControl.ContentProperty, ContextCalendar.Year);
|
_headerButton?.SetValue(ContentControl.ContentProperty, ContextDate.Year);
|
||||||
}
|
}
|
||||||
else if (Mode == CalendarViewMode.Month)
|
else if (Mode == CalendarViewMode.Month)
|
||||||
{
|
{
|
||||||
@@ -523,13 +512,13 @@ public class CalendarView : TemplatedControl
|
|||||||
IsVisibleProperty.SetValue(true, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
IsVisibleProperty.SetValue(true, _yearButton, _monthButton, _monthGrid, _fastPreviousButton,
|
||||||
_fastNextButton);
|
_fastNextButton);
|
||||||
// _headerButton?.SetValue(ContentControl.ContentProperty, ContextCalendar.Year);
|
// _headerButton?.SetValue(ContentControl.ContentProperty, ContextCalendar.Year);
|
||||||
_yearButton?.SetValue(ContentControl.ContentProperty, ContextCalendar.Year);
|
_yearButton?.SetValue(ContentControl.ContentProperty, ContextDate.Year);
|
||||||
_monthButton?.SetValue(ContentControl.ContentProperty,
|
_monthButton?.SetValue(ContentControl.ContentProperty,
|
||||||
DateTimeHelper.GetCurrentDateTimeFormatInfo().AbbreviatedMonthNames[ContextCalendar.Month-1 ?? 0]);
|
DateTimeHelper.GetCurrentDateTimeFormatInfo().AbbreviatedMonthNames[ContextDate.Month-1 ?? 0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool canForward = !(ContextCalendar.EndYear <= 0) && !(ContextCalendar.Year <= 0);
|
bool canForward = !(ContextDate.EndYear <= 0) && !(ContextDate.Year <= 0);
|
||||||
bool canNext = !(ContextCalendar.StartYear > 9999) && !(ContextCalendar.EndYear > 9999);
|
bool canNext = !(ContextDate.StartYear > 9999) && !(ContextDate.EndYear > 9999);
|
||||||
IsEnabledProperty.SetValue(canForward, _previousButton, _fastPreviousButton);
|
IsEnabledProperty.SetValue(canForward, _previousButton, _fastPreviousButton);
|
||||||
IsEnabledProperty.SetValue(canNext, _nextButton, _fastNextButton);
|
IsEnabledProperty.SetValue(canNext, _nextButton, _fastNextButton);
|
||||||
}
|
}
|
||||||
@@ -551,7 +540,7 @@ public class CalendarView : TemplatedControl
|
|||||||
{
|
{
|
||||||
if (child is not CalendarDayButton { DataContext: DateTime d } button) continue;
|
if (child is not CalendarDayButton { DataContext: DateTime d } button) continue;
|
||||||
button.ResetSelection();
|
button.ResetSelection();
|
||||||
if(d.Month != ContextCalendar.Month) continue;
|
if(d.Month != ContextDate.Month) continue;
|
||||||
if (d < rangeEnd && d > rangeStart) button.IsInRange = true;
|
if (d < rangeEnd && d > rangeStart) button.IsInRange = true;
|
||||||
if (d == previewStart) button.IsPreviewStartDate = true;
|
if (d == previewStart) button.IsPreviewStartDate = true;
|
||||||
if (d == previewEnd) button.IsPreviewEndDate = true;
|
if (d == previewEnd) button.IsPreviewEndDate = true;
|
||||||
@@ -580,6 +569,6 @@ public class CalendarView : TemplatedControl
|
|||||||
protected override void OnPointerExited(PointerEventArgs e)
|
protected override void OnPointerExited(PointerEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnPointerExited(e);
|
base.OnPointerExited(e);
|
||||||
OnDatePreviewed?.Invoke(this, new CalendarDayButtonEventArgs(null));
|
DatePreviewed?.Invoke(this, new CalendarDayButtonEventArgs(null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,8 +6,8 @@ internal enum CalendarViewMode
|
|||||||
Month,
|
Month,
|
||||||
// Show Months in current year.
|
// Show Months in current year.
|
||||||
Year,
|
Year,
|
||||||
// The button represents 10(12) years.
|
// The button represents 1 years.
|
||||||
Decade,
|
Decade,
|
||||||
// The button represents 100(120) years.
|
// The button represents 10 years.
|
||||||
Century,
|
Century,
|
||||||
}
|
}
|
||||||
@@ -35,10 +35,6 @@ public class CalendarYearButton : ContentControl
|
|||||||
internal void SetContext(CalendarViewMode mode, CalendarContext context)
|
internal void SetContext(CalendarViewMode mode, CalendarContext context)
|
||||||
{
|
{
|
||||||
CalendarContext = context.Clone();
|
CalendarContext = context.Clone();
|
||||||
CalendarContext.Month = context.Month;
|
|
||||||
CalendarContext.Year = context.Year;
|
|
||||||
CalendarContext.StartYear = context.StartYear;
|
|
||||||
CalendarContext.EndYear = context.EndYear;
|
|
||||||
Mode = mode;
|
Mode = mode;
|
||||||
switch (Mode)
|
switch (Mode)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class DatePicker: DatePickerBase, IClearControl
|
|||||||
Button.ClickEvent.RemoveHandler(OnButtonClick, _button);
|
Button.ClickEvent.RemoveHandler(OnButtonClick, _button);
|
||||||
if (_calendar != null)
|
if (_calendar != null)
|
||||||
{
|
{
|
||||||
_calendar.OnDateSelected -= OnDateSelected;
|
_calendar.DateSelected -= OnDateSelected;
|
||||||
}
|
}
|
||||||
|
|
||||||
_button = e.NameScope.Find<Button>(PART_Button);
|
_button = e.NameScope.Find<Button>(PART_Button);
|
||||||
@@ -88,7 +88,7 @@ public class DatePicker: DatePickerBase, IClearControl
|
|||||||
|
|
||||||
if (_calendar != null)
|
if (_calendar != null)
|
||||||
{
|
{
|
||||||
_calendar.OnDateSelected += OnDateSelected;
|
_calendar.DateSelected += OnDateSelected;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ public class DatePicker: DatePickerBase, IClearControl
|
|||||||
if (_calendar is not null)
|
if (_calendar is not null)
|
||||||
{
|
{
|
||||||
var date = SelectedDate ?? DateTime.Today;
|
var date = SelectedDate ?? DateTime.Today;
|
||||||
_calendar.ContextCalendar = new CalendarContext(date.Year, date.Month, 1);
|
_calendar.ContextDate = new CalendarContext(date.Year, date.Month);
|
||||||
_calendar.UpdateDayButtons();
|
_calendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
SetCurrentValue(IsDropdownOpenProperty, true);
|
SetCurrentValue(IsDropdownOpenProperty, true);
|
||||||
@@ -139,7 +139,7 @@ public class DatePicker: DatePickerBase, IClearControl
|
|||||||
if (_calendar is not null)
|
if (_calendar is not null)
|
||||||
{
|
{
|
||||||
var d = SelectedDate ?? DateTime.Today;
|
var d = SelectedDate ?? DateTime.Today;
|
||||||
_calendar.ContextCalendar = new CalendarContext(date.Year, date.Month, 1);
|
_calendar.ContextDate = new CalendarContext(date.Year, date.Month);
|
||||||
_calendar.UpdateDayButtons();
|
_calendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
_calendar?.MarkDates(startDate: date, endDate: date);
|
_calendar?.MarkDates(startDate: date, endDate: date);
|
||||||
@@ -152,7 +152,7 @@ public class DatePicker: DatePickerBase, IClearControl
|
|||||||
if (_calendar is not null)
|
if (_calendar is not null)
|
||||||
{
|
{
|
||||||
var date = SelectedDate ?? DateTime.Today;
|
var date = SelectedDate ?? DateTime.Today;
|
||||||
_calendar.ContextCalendar = new CalendarContext(date.Year, date.Month, 1);
|
_calendar.ContextDate = new CalendarContext(date.Year, date.Month);
|
||||||
_calendar.UpdateDayButtons();
|
_calendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
SetCurrentValue(IsDropdownOpenProperty, true);
|
SetCurrentValue(IsDropdownOpenProperty, true);
|
||||||
|
|||||||
@@ -101,13 +101,13 @@ public class DateRangePicker : DatePickerBase
|
|||||||
Button.ClickEvent.RemoveHandler(OnButtonClick, _button);
|
Button.ClickEvent.RemoveHandler(OnButtonClick, _button);
|
||||||
if (_startCalendar != null)
|
if (_startCalendar != null)
|
||||||
{
|
{
|
||||||
_startCalendar.OnDateSelected -= OnDateSelected;
|
_startCalendar.DateSelected -= OnDateSelected;
|
||||||
_startCalendar.OnDatePreviewed -= OnDatePreviewed;
|
_startCalendar.DatePreviewed -= OnDatePreviewed;
|
||||||
}
|
}
|
||||||
if (_endCalendar != null)
|
if (_endCalendar != null)
|
||||||
{
|
{
|
||||||
_endCalendar.OnDateSelected -= OnDateSelected;
|
_endCalendar.DateSelected -= OnDateSelected;
|
||||||
_endCalendar.OnDatePreviewed -= OnDatePreviewed;
|
_endCalendar.DatePreviewed -= OnDatePreviewed;
|
||||||
}
|
}
|
||||||
_button = e.NameScope.Find<Button>(PART_Button);
|
_button = e.NameScope.Find<Button>(PART_Button);
|
||||||
_popup = e.NameScope.Find<Popup>(PART_Popup);
|
_popup = e.NameScope.Find<Popup>(PART_Popup);
|
||||||
@@ -123,13 +123,13 @@ public class DateRangePicker : DatePickerBase
|
|||||||
|
|
||||||
if (_startCalendar != null)
|
if (_startCalendar != null)
|
||||||
{
|
{
|
||||||
_startCalendar.OnDateSelected += OnDateSelected;
|
_startCalendar.DateSelected += OnDateSelected;
|
||||||
_startCalendar.OnDatePreviewed += OnDatePreviewed;
|
_startCalendar.DatePreviewed += OnDatePreviewed;
|
||||||
}
|
}
|
||||||
if (_endCalendar != null)
|
if (_endCalendar != null)
|
||||||
{
|
{
|
||||||
_endCalendar.OnDateSelected += OnDateSelected;
|
_endCalendar.DateSelected += OnDateSelected;
|
||||||
_endCalendar.OnDatePreviewed += OnDatePreviewed;
|
_endCalendar.DatePreviewed += OnDatePreviewed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,7 +211,7 @@ public class DateRangePicker : DatePickerBase
|
|||||||
if (_startCalendar is not null)
|
if (_startCalendar is not null)
|
||||||
{
|
{
|
||||||
var date = SelectedStartDate ?? DateTime.Today;
|
var date = SelectedStartDate ?? DateTime.Today;
|
||||||
_startCalendar.ContextCalendar = new CalendarContext(date.Year, date.Month, 1);
|
_startCalendar.ContextDate = new CalendarContext(date.Year, date.Month);
|
||||||
_startCalendar.UpdateDayButtons();
|
_startCalendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,7 +223,7 @@ public class DateRangePicker : DatePickerBase
|
|||||||
date2 = SelectedStartDate ?? DateTime.Today;
|
date2 = SelectedStartDate ?? DateTime.Today;
|
||||||
date2 = date2.Value.AddMonths(1);
|
date2 = date2.Value.AddMonths(1);
|
||||||
}
|
}
|
||||||
_endCalendar.ContextCalendar = new CalendarContext(date2?.Year, date2?.Month, 1);
|
_endCalendar.ContextDate = new CalendarContext(date2?.Year, date2?.Month);
|
||||||
_endCalendar.UpdateDayButtons();
|
_endCalendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ public class DateRangePicker : DatePickerBase
|
|||||||
if (_endCalendar is not null)
|
if (_endCalendar is not null)
|
||||||
{
|
{
|
||||||
var date = SelectedEndDate ?? DateTime.Today;
|
var date = SelectedEndDate ?? DateTime.Today;
|
||||||
_endCalendar.ContextCalendar = new CalendarContext(date.Year, date.Month, 1);
|
_endCalendar.ContextDate = new CalendarContext(date.Year, date.Month);
|
||||||
_endCalendar.UpdateDayButtons();
|
_endCalendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
if (_startCalendar is not null)
|
if (_startCalendar is not null)
|
||||||
@@ -244,7 +244,7 @@ public class DateRangePicker : DatePickerBase
|
|||||||
date2 = SelectedStartDate ?? DateTime.Today;
|
date2 = SelectedStartDate ?? DateTime.Today;
|
||||||
date2 = date2.Value.AddMonths(-1);
|
date2 = date2.Value.AddMonths(-1);
|
||||||
}
|
}
|
||||||
_startCalendar.ContextCalendar = new CalendarContext(date2?.Year, date2?.Month, 1);
|
_startCalendar.ContextDate = new CalendarContext(date2?.Year, date2?.Month);
|
||||||
_startCalendar.UpdateDayButtons();
|
_startCalendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -290,14 +290,14 @@ public class DateRangePicker : DatePickerBase
|
|||||||
if (_startCalendar is not null)
|
if (_startCalendar is not null)
|
||||||
{
|
{
|
||||||
var date1 = SelectedStartDate ?? DateTime.Today;
|
var date1 = SelectedStartDate ?? DateTime.Today;
|
||||||
_startCalendar.ContextCalendar = new CalendarContext(date1.Year, date.Month, 1);
|
_startCalendar.ContextDate = new CalendarContext(date1.Year, date.Month);
|
||||||
_startCalendar.UpdateDayButtons();
|
_startCalendar.UpdateDayButtons();
|
||||||
_startCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd);
|
_startCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd);
|
||||||
}
|
}
|
||||||
if (_endCalendar is not null)
|
if (_endCalendar is not null)
|
||||||
{
|
{
|
||||||
var date2 = SelectedEndDate ?? DateTime.Today;
|
var date2 = SelectedEndDate ?? DateTime.Today;
|
||||||
_endCalendar.ContextCalendar = new CalendarContext(date2.Year, date2.Month, 1);
|
_endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month);
|
||||||
_endCalendar.UpdateDayButtons();
|
_endCalendar.UpdateDayButtons();
|
||||||
_endCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd);
|
_endCalendar?.MarkDates(SelectedStartDate, SelectedEndDate, _previewStart, _previewEnd);
|
||||||
}
|
}
|
||||||
@@ -310,16 +310,16 @@ public class DateRangePicker : DatePickerBase
|
|||||||
if (_startCalendar is not null)
|
if (_startCalendar is not null)
|
||||||
{
|
{
|
||||||
var date = SelectedStartDate ?? DateTime.Today;
|
var date = SelectedStartDate ?? DateTime.Today;
|
||||||
_startCalendar.ContextCalendar = new CalendarContext(date.Year, date.Month, 1);
|
_startCalendar.ContextDate = new CalendarContext(date.Year, date.Month);
|
||||||
_startCalendar.UpdateDayButtons();
|
// _startCalendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_endCalendar is not null)
|
if (_endCalendar is not null)
|
||||||
{
|
{
|
||||||
var date2 = SelectedStartDate ?? DateTime.Today;
|
var date2 = SelectedStartDate ?? DateTime.Today;
|
||||||
date2 = date2.AddMonths(1);
|
date2 = date2.AddMonths(1);
|
||||||
_endCalendar.ContextCalendar = new CalendarContext(date2.Year, date2.Month, 1);
|
_endCalendar.ContextDate = new CalendarContext(date2.Year, date2.Month);
|
||||||
_endCalendar.UpdateDayButtons();
|
// _endCalendar.UpdateDayButtons();
|
||||||
}
|
}
|
||||||
SetCurrentValue(IsDropdownOpenProperty, true);
|
SetCurrentValue(IsDropdownOpenProperty, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user