diff --git a/src/Ursa.Themes.Semi/Controls/Pagination.axaml b/src/Ursa.Themes.Semi/Controls/Pagination.axaml
index 923c133..de80998 100644
--- a/src/Ursa.Themes.Semi/Controls/Pagination.axaml
+++ b/src/Ursa.Themes.Semi/Controls/Pagination.axaml
@@ -19,4 +19,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa/Controls/Pagination/Pagination.cs b/src/Ursa/Controls/Pagination/Pagination.cs
index 2c58f4f..9b04540 100644
--- a/src/Ursa/Controls/Pagination/Pagination.cs
+++ b/src/Ursa/Controls/Pagination/Pagination.cs
@@ -23,6 +23,12 @@ public class Pagination: TemplatedControl
private StackPanel? _buttonPanel;
private ComboBox? _sizeChangerComboBox;
+ ///
+ /// To reduce allocation, there are maximum of 7 buttons and 2 selection controls. it will be reused.
+ ///
+ private PaginationExpandButton? _leftSelection;
+ private PaginationExpandButton? _rightSelection;
+
protected override void OnApplyTemplate(TemplateAppliedEventArgs e)
{
base.OnApplyTemplate(e);
@@ -34,6 +40,8 @@ public class Pagination: TemplatedControl
_sizeChangerComboBox = e.NameScope.Find(PART_SizeChangerComboBox);
if (_previousButton != null) _previousButton.Click += OnButtonClick;
if (_nextButton != null) _nextButton.Click += OnButtonClick;
+ _leftSelection = new PaginationExpandButton();
+ _rightSelection = new PaginationExpandButton();
UpdateButtons();
}
@@ -60,7 +68,7 @@ public class Pagination: TemplatedControl
}
public static readonly StyledProperty PageSizeProperty = AvaloniaProperty.Register(
- nameof(PageSize), defaultValue: 100);
+ nameof(PageSize), defaultValue: 50);
///
/// Page size.
@@ -147,7 +155,15 @@ public class Pagination: TemplatedControl
_buttonPanel?.Children.Clear();
for (int i = 0; i < pageCount; i++)
{
- _buttonPanel?.Children.Add(new Button { Content = i + 1 });
+ if (i == 1 && _leftSelection is not null)
+ {
+ _leftSelection.Pages = new AvaloniaList() { PageSize + 1, PageSize + 2, PageSize + 3 };
+ _buttonPanel?.Children.Add(_leftSelection);
+ }
+ else
+ {
+ _buttonPanel?.Children.Add(new Button { Content = i + 1 });
+ }
}
}
}
\ No newline at end of file
diff --git a/src/Ursa/Controls/Pagination/PaginationExpandButton.cs b/src/Ursa/Controls/Pagination/PaginationExpandButton.cs
new file mode 100644
index 0000000..ba330bb
--- /dev/null
+++ b/src/Ursa/Controls/Pagination/PaginationExpandButton.cs
@@ -0,0 +1,19 @@
+using Avalonia;
+using Avalonia.Collections;
+using Avalonia.Controls.Primitives;
+
+namespace Ursa.Controls;
+
+public class PaginationExpandButton: TemplatedControl
+{
+ public static readonly StyledProperty> PagesProperty = AvaloniaProperty.Register>(
+ nameof(Pages));
+
+ public AvaloniaList Pages
+ {
+ get => GetValue(PagesProperty);
+ set => SetValue(PagesProperty, value);
+ }
+
+
+}
\ No newline at end of file