From 2138cb8706b00ca1272176de3ced39c8c905cbac Mon Sep 17 00:00:00 2001 From: chinboy Date: Wed, 23 Jul 2025 17:49:11 +0800 Subject: [PATCH] Add IsHideOnSinglePage support for Pagination --- .../Pagination/AbstractPagination.cs | 37 +++++++++++++++++++ src/AtomUI.Controls/Pagination/Pagination.cs | 9 ----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/src/AtomUI.Controls/Pagination/AbstractPagination.cs b/src/AtomUI.Controls/Pagination/AbstractPagination.cs index 791aaad2d..5250e8072 100644 --- a/src/AtomUI.Controls/Pagination/AbstractPagination.cs +++ b/src/AtomUI.Controls/Pagination/AbstractPagination.cs @@ -4,6 +4,7 @@ using AtomUI.Theme.Utils; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives; +using Avalonia.Data; namespace AtomUI.Controls; @@ -17,6 +18,9 @@ public abstract class AbstractPagination : TemplatedControl, #region 公共属性定义 + public static readonly StyledProperty IsHideOnSinglePageProperty = + AvaloniaProperty.Register(nameof(IsHideOnSinglePage)); + public static readonly StyledProperty AlignProperty = AvaloniaProperty.Register(nameof(PaginationAlign)); @@ -37,6 +41,17 @@ public abstract class AbstractPagination : TemplatedControl, public static readonly StyledProperty IsMotionEnabledProperty = MotionAwareControlProperty.IsMotionEnabledProperty.AddOwner(); + public static readonly DirectProperty PageCountProperty = + AvaloniaProperty.RegisterDirect(nameof(PageCount), + o => o.PageCount, + (o, v) => o.PageCount = v); + + public bool IsHideOnSinglePage + { + get => GetValue(IsHideOnSinglePageProperty); + set => SetValue(IsHideOnSinglePageProperty, value); + } + public PaginationAlign Align { get => GetValue(AlignProperty); @@ -73,6 +88,14 @@ public abstract class AbstractPagination : TemplatedControl, set => SetValue(IsMotionEnabledProperty, value); } + private int _pageCount; + + public int PageCount + { + get => _pageCount; + internal set => SetAndRaise(PageCountProperty, ref _pageCount, value); + } + #endregion #region 公共事件定义 @@ -122,6 +145,19 @@ public abstract class AbstractPagination : TemplatedControl, HandlePageConditionChanged(); } } + + if (change.Property == IsHideOnSinglePageProperty || + change.Property == PageCountProperty) + { + if (IsHideOnSinglePage) + { + SetValue(IsVisibleProperty, PageCount > 1, BindingPriority.Template); + } + else + { + SetValue(IsVisibleProperty, true, BindingPriority.Template); + } + } } protected void HandlePageConditionChanged() @@ -131,6 +167,7 @@ public abstract class AbstractPagination : TemplatedControl, var pageCount = (int)Math.Ceiling(total / (double)pageSize); var currentPage = Math.Max(1, Math.Min(CurrentPage, pageCount)); CurrentPage = currentPage; + PageCount = pageCount; NotifyPageConditionChanged(currentPage, pageCount, pageSize, total); } diff --git a/src/AtomUI.Controls/Pagination/Pagination.cs b/src/AtomUI.Controls/Pagination/Pagination.cs index 7a6ff1258..0b853e1ad 100644 --- a/src/AtomUI.Controls/Pagination/Pagination.cs +++ b/src/AtomUI.Controls/Pagination/Pagination.cs @@ -27,9 +27,6 @@ public class Pagination : AbstractPagination, IControlSharedTokenResourcesHost #region 公共属性定义 - public static readonly StyledProperty IsHideOnSinglePageProperty = - AvaloniaProperty.Register(nameof(IsHideOnSinglePage)); - public static readonly StyledProperty IsShowSizeChangerProperty = AvaloniaProperty.Register(nameof(IsShowSizeChanger)); @@ -42,12 +39,6 @@ public class Pagination : AbstractPagination, IControlSharedTokenResourcesHost public static readonly StyledProperty TotalInfoTemplateProperty = AvaloniaProperty.Register(nameof(TotalInfoTemplate)); - public bool IsHideOnSinglePage - { - get => GetValue(IsHideOnSinglePageProperty); - set => SetValue(IsHideOnSinglePageProperty, value); - } - public bool IsShowSizeChanger { get => GetValue(IsShowSizeChangerProperty);