From 66508f18b6077966907398da3bed3ea560ded195 Mon Sep 17 00:00:00 2001 From: CHINBOY Date: Sat, 14 Jun 2025 17:48:09 +0800 Subject: [PATCH] Refactor DatePickerTheme --- src/AtomUI.Controls/AtomUI.Controls.csproj | 1 - .../DatePicker/CalendarView/Calendar.cs | 4 +- .../DatePicker/CalendarView/CalendarButton.cs | 6 +- .../CalendarView/CalendarDayButton.cs | 6 +- .../DatePicker/CalendarView/CalendarItem.cs | 2 +- .../CalendarView/DualMonthRangeCalendar.cs | 2 + .../DatePicker/CalendarView/RangeCalendar.cs | 2 + src/AtomUI.Controls/DatePicker/DatePicker.cs | 4 +- .../DatePicker/DatePickerFlyoutPresenter.cs | 5 +- .../DatePickerFlyoutPresenterTheme.cs | 30 ---- .../DatePicker/DatePickerPresenter.cs | 11 +- .../DatePicker/DatePickerPresenterTheme.cs | 147 ------------------ .../DualMonthRangeDatePickerPresenterTheme.cs | 31 ---- .../DatePicker/RangeDatePicker.cs | 2 - .../RangeDatePickerFlyoutPresenterTheme.cs | 30 ---- .../Themes/DatePickerPresenterTheme.axaml | 7 +- .../DatePicker/Themes/DatePickerThemes.axaml | 13 +- ...alMonthRangeDatePickerPresenterTheme.axaml | 5 +- .../TimedRangeDatePickerPresenterTheme.axaml | 5 +- .../ControlThemePool.g.cs | 4 - .../Themes/RangeInfoPickerInputTheme.axaml | 2 + .../TimePicker/DateTimePickerPanel.cs | 3 +- .../TimePicker/Themes/TimeViewTheme.axaml | 2 +- 23 files changed, 46 insertions(+), 278 deletions(-) delete mode 100644 src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenterTheme.cs delete mode 100644 src/AtomUI.Controls/DatePicker/DatePickerPresenterTheme.cs delete mode 100644 src/AtomUI.Controls/DatePicker/DualMonthRangeDatePickerPresenterTheme.cs delete mode 100644 src/AtomUI.Controls/DatePicker/RangeDatePickerFlyoutPresenterTheme.cs diff --git a/src/AtomUI.Controls/AtomUI.Controls.csproj b/src/AtomUI.Controls/AtomUI.Controls.csproj index 5240932f9..367cc9d61 100644 --- a/src/AtomUI.Controls/AtomUI.Controls.csproj +++ b/src/AtomUI.Controls/AtomUI.Controls.csproj @@ -25,5 +25,4 @@ - diff --git a/src/AtomUI.Controls/DatePicker/CalendarView/Calendar.cs b/src/AtomUI.Controls/DatePicker/CalendarView/Calendar.cs index c478ffb37..c48b1431e 100644 --- a/src/AtomUI.Controls/DatePicker/CalendarView/Calendar.cs +++ b/src/AtomUI.Controls/DatePicker/CalendarView/Calendar.cs @@ -21,7 +21,7 @@ public class DateSelectedEventArgs : EventArgs } } -[TemplatePart(DatePickerCalendarThemeConstants.CalendarItemPart, typeof(CalendarItem))] +[TemplatePart(CalendarThemeConstants.CalendarItemPart, typeof(CalendarItem))] internal class Calendar : TemplatedControl { internal const int RowsPerMonth = 7; @@ -1431,7 +1431,7 @@ internal class Calendar : TemplatedControl protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - CalendarItem = e.NameScope.Find(DatePickerCalendarThemeConstants.CalendarItemPart); + CalendarItem = e.NameScope.Find(CalendarThemeConstants.CalendarItemPart); if (SelectedDate is not null) { diff --git a/src/AtomUI.Controls/DatePicker/CalendarView/CalendarButton.cs b/src/AtomUI.Controls/DatePicker/CalendarView/CalendarButton.cs index c8dabfd15..890a9e063 100644 --- a/src/AtomUI.Controls/DatePicker/CalendarView/CalendarButton.cs +++ b/src/AtomUI.Controls/DatePicker/CalendarView/CalendarButton.cs @@ -115,7 +115,7 @@ internal sealed class CalendarButton : AvaloniaButton protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) { base.OnAttachedToLogicalTree(e); - ConfigureTransitions(); + SetupTransitions(); } /// @@ -128,7 +128,7 @@ internal sealed class CalendarButton : AvaloniaButton UpdatePseudoClasses(); } - private void ConfigureTransitions() + private void SetupTransitions() { if (IsMotionEnabled) { @@ -229,7 +229,7 @@ internal sealed class CalendarButton : AvaloniaButton { if (change.Property == IsMotionEnabledProperty) { - ConfigureTransitions(); + SetupTransitions(); } } } diff --git a/src/AtomUI.Controls/DatePicker/CalendarView/CalendarDayButton.cs b/src/AtomUI.Controls/DatePicker/CalendarView/CalendarDayButton.cs index 861f32b22..9c672d8c9 100644 --- a/src/AtomUI.Controls/DatePicker/CalendarView/CalendarDayButton.cs +++ b/src/AtomUI.Controls/DatePicker/CalendarView/CalendarDayButton.cs @@ -195,7 +195,7 @@ internal sealed class CalendarDayButton : AvaloniaButton, UpdatePseudoClasses(); } - private void ConfigureTransitions() + private void SetupTransitions() { if (IsMotionEnabled) { @@ -301,7 +301,7 @@ internal sealed class CalendarDayButton : AvaloniaButton, { base.OnAttachedToLogicalTree(e); _resourceBindingsDisposable = new CompositeDisposable(); - ConfigureTransitions(); + SetupTransitions(); } protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) @@ -325,7 +325,7 @@ internal sealed class CalendarDayButton : AvaloniaButton, { if (change.Property == IsMotionEnabledProperty) { - ConfigureTransitions(); + SetupTransitions(); } } } diff --git a/src/AtomUI.Controls/DatePicker/CalendarView/CalendarItem.cs b/src/AtomUI.Controls/DatePicker/CalendarView/CalendarItem.cs index 133eaf4a4..9143b01ef 100644 --- a/src/AtomUI.Controls/DatePicker/CalendarView/CalendarItem.cs +++ b/src/AtomUI.Controls/DatePicker/CalendarView/CalendarItem.cs @@ -342,7 +342,7 @@ internal class CalendarItem : TemplatedControl, protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - HeaderButton = e.NameScope.Get(CalendarItemThemeConstants.HeaderButtonPart); + HeaderButton = e.NameScope.Get(CalendarItemThemeConstants.HeaderButtonPart); PreviousButton = e.NameScope.Get(CalendarItemThemeConstants.PreviousButtonPart); PreviousMonthButton = e.NameScope.Get(CalendarItemThemeConstants.PreviousMonthButtonPart); diff --git a/src/AtomUI.Controls/DatePicker/CalendarView/DualMonthRangeCalendar.cs b/src/AtomUI.Controls/DatePicker/CalendarView/DualMonthRangeCalendar.cs index 924847b6e..25974fa14 100644 --- a/src/AtomUI.Controls/DatePicker/CalendarView/DualMonthRangeCalendar.cs +++ b/src/AtomUI.Controls/DatePicker/CalendarView/DualMonthRangeCalendar.cs @@ -4,6 +4,8 @@ namespace AtomUI.Controls.CalendarView; internal class DualMonthRangeCalendar : RangeCalendar { + protected override Type StyleKeyOverride => typeof(DualMonthRangeCalendar); + internal override void ResetStates() { base.ResetStates(); diff --git a/src/AtomUI.Controls/DatePicker/CalendarView/RangeCalendar.cs b/src/AtomUI.Controls/DatePicker/CalendarView/RangeCalendar.cs index adbd71133..157132905 100644 --- a/src/AtomUI.Controls/DatePicker/CalendarView/RangeCalendar.cs +++ b/src/AtomUI.Controls/DatePicker/CalendarView/RangeCalendar.cs @@ -20,6 +20,8 @@ public class RangeDateSelectedEventArgs : EventArgs internal class RangeCalendar : Calendar { + protected override Type StyleKeyOverride => typeof(RangeCalendar); + #region 公共属性定义 public static readonly StyledProperty SecondarySelectedDateProperty = diff --git a/src/AtomUI.Controls/DatePicker/DatePicker.cs b/src/AtomUI.Controls/DatePicker/DatePicker.cs index 41fb601df..6023e00dd 100644 --- a/src/AtomUI.Controls/DatePicker/DatePicker.cs +++ b/src/AtomUI.Controls/DatePicker/DatePicker.cs @@ -256,13 +256,13 @@ public class DatePicker : InfoPickerInput, { SelectedDateTime = DefaultDateTime; } + + Text = FormatDateTime(SelectedDateTime); if (InfoIcon is null) { SetValue(InfoIconProperty, AntDesignIconPackage.CalendarOutlined(), BindingPriority.Template); } - - Text = FormatDateTime(SelectedDateTime); } protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) diff --git a/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenter.cs b/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenter.cs index 078cfffab..e2ab855b1 100644 --- a/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenter.cs +++ b/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenter.cs @@ -1,4 +1,5 @@ -using Avalonia.Controls; +using AtomUI.Controls.Themes; +using Avalonia.Controls; using Avalonia.Controls.Primitives; namespace AtomUI.Controls; @@ -12,6 +13,6 @@ internal class DatePickerFlyoutPresenter : FlyoutPresenter protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - DatePickerPresenter = e.NameScope.Get(DatePickerFlyoutPresenterTheme.DatePickerPresenterPart); + DatePickerPresenter = e.NameScope.Get(DatePickerFlyoutPresenterThemeConstants.DatePickerPresenterPart); } } \ No newline at end of file diff --git a/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenterTheme.cs b/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenterTheme.cs deleted file mode 100644 index 1be46b494..000000000 --- a/src/AtomUI.Controls/DatePicker/DatePickerFlyoutPresenterTheme.cs +++ /dev/null @@ -1,30 +0,0 @@ -using AtomUI.Theme.Styling; -using Avalonia.Controls; -using Avalonia.Controls.Templates; - -namespace AtomUI.Controls; - -[ControlThemeProvider] -internal class DatePickerFlyoutPresenterTheme : ArrowDecoratedBoxTheme -{ - public const string DatePickerPresenterPart = "PART_DatePickerPresenter"; - - public DatePickerFlyoutPresenterTheme() - : this(typeof(DatePickerFlyoutPresenter)) - { - } - - protected DatePickerFlyoutPresenterTheme(Type targetType) : base(targetType) - { - } - - protected override Control BuildContent(INameScope scope) - { - var datePickerPresenter = new DatePickerPresenter() - { - Name = DatePickerPresenterPart, - }; - datePickerPresenter.RegisterInNameScope(scope); - return datePickerPresenter; - } -} \ No newline at end of file diff --git a/src/AtomUI.Controls/DatePicker/DatePickerPresenter.cs b/src/AtomUI.Controls/DatePicker/DatePickerPresenter.cs index f1a07c9e2..f3a4924a5 100644 --- a/src/AtomUI.Controls/DatePicker/DatePickerPresenter.cs +++ b/src/AtomUI.Controls/DatePicker/DatePickerPresenter.cs @@ -1,5 +1,6 @@ using System.Reactive.Disposables; using AtomUI.Controls.CalendarView; +using AtomUI.Controls.Themes; using AtomUI.Theme; using AtomUI.Theme.Data; using AtomUI.Theme.Styling; @@ -194,11 +195,11 @@ internal class DatePickerPresenter : PickerPresenterBase, protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - _nowButton = e.NameScope.Get