feat: improve readonly mode.

This commit is contained in:
rabbitism
2024-08-10 12:50:42 +08:00
parent 69f72238a6
commit 642ad4964e
3 changed files with 50 additions and 61 deletions

View File

@@ -31,5 +31,6 @@
<TextBlock Text="Tiny Pagination"/> <TextBlock Text="Tiny Pagination"/>
<u:Pagination Theme="{DynamicResource TinyPagination}" TotalCount="100" PageSize="1"/> <u:Pagination Theme="{DynamicResource TinyPagination}" TotalCount="100" PageSize="1"/>
<u:Pagination Classes="ReadOnly" Theme="{DynamicResource TinyPagination}" TotalCount="100" PageSize="1"/>
</StackPanel> </StackPanel>
</UserControl> </UserControl>

View File

@@ -8,44 +8,36 @@
</StackPanel> </StackPanel>
</Design.PreviewWith> </Design.PreviewWith>
<!-- Add Resources Here --> <!-- Add Resources Here -->
<ControlTheme x:Key="{x:Type u:Pagination}" <ControlTheme x:Key="{x:Type u:Pagination}" TargetType="u:Pagination">
TargetType="u:Pagination">
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="u:Pagination"> <ControlTemplate TargetType="u:Pagination">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<u:PaginationButton <u:PaginationButton Name="{x:Static u:Pagination.PART_PreviousButton}" u:DisabledAdorner.IsEnabled="True">
u:DisabledAdorner.IsEnabled="True"
Name="{x:Static u:Pagination.PART_PreviousButton}">
<PathIcon <PathIcon
Width="12" Width="12"
Height="12" Height="12"
Data="{DynamicResource PaginationBackwardGlyph}" Data="{DynamicResource PaginationBackwardGlyph}"
Foreground="{DynamicResource PaginationButtonIconForeground}" /> Foreground="{DynamicResource PaginationButtonIconForeground}" />
</u:PaginationButton> </u:PaginationButton>
<StackPanel <StackPanel Name="{x:Static u:Pagination.PART_ButtonPanel}" Orientation="Horizontal" />
Name="{x:Static u:Pagination.PART_ButtonPanel}" <u:PaginationButton Name="{x:Static u:Pagination.PART_NextButton}" u:DisabledAdorner.IsEnabled="True">
Orientation="Horizontal" />
<u:PaginationButton
u:DisabledAdorner.IsEnabled="True"
Name="{x:Static u:Pagination.PART_NextButton}">
<PathIcon <PathIcon
Width="12" Width="12"
Height="12" Height="12"
Data="{DynamicResource PaginationForwardGlyph}" Data="{DynamicResource PaginationForwardGlyph}"
Foreground="{DynamicResource PaginationButtonIconForeground}" /> Foreground="{DynamicResource PaginationButtonIconForeground}" />
</u:PaginationButton> </u:PaginationButton>
<StackPanel Orientation="Horizontal" <StackPanel IsVisible="{TemplateBinding ShowQuickJump}" Orientation="Horizontal">
IsVisible="{TemplateBinding ShowQuickJump}">
<TextBlock <TextBlock
Margin="4 0" Margin="4,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{DynamicResource STRING_PAGINATION_JUMP_TO}" /> Text="{DynamicResource STRING_PAGINATION_JUMP_TO}" />
<u:NumericIntUpDown <u:NumericIntUpDown
x:Name="{x:Static u:Pagination.PART_QuickJumpInput}" x:Name="{x:Static u:Pagination.PART_QuickJumpInput}"
ShowButtonSpinner="False" Width="50"
Width="50" /> ShowButtonSpinner="False" />
<TextBlock <TextBlock
Margin="4 0" Margin="4,0"
VerticalAlignment="Center" VerticalAlignment="Center"
Text="{DynamicResource STRING_PAGINATION_PAGE}" /> Text="{DynamicResource STRING_PAGINATION_PAGE}" />
</StackPanel> </StackPanel>
@@ -59,39 +51,45 @@
</Setter> </Setter>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="TinyPagination" <ControlTheme x:Key="TinyPagination" TargetType="{x:Type u:Pagination}">
TargetType="{x:Type u:Pagination}">
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate TargetType="u:Pagination"> <ControlTemplate TargetType="u:Pagination">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<u:PaginationButton <u:PaginationButton Name="{x:Static u:Pagination.PART_PreviousButton}" u:DisabledAdorner.IsEnabled="True">
u:DisabledAdorner.IsEnabled="True"
Name="{x:Static u:Pagination.PART_PreviousButton}">
<PathIcon <PathIcon
Width="12" Width="12"
Height="12" Height="12"
Data="{DynamicResource PaginationBackwardGlyph}" Data="{DynamicResource PaginationBackwardGlyph}"
Foreground="{DynamicResource PaginationButtonIconForeground}" /> Foreground="{DynamicResource PaginationButtonIconForeground}" />
</u:PaginationButton> </u:PaginationButton>
<StackPanel Orientation="Horizontal"> <Grid ColumnDefinitions="*, Auto, *">
<u:NumericIntUpDown <u:NumericIntUpDown
Name="PART_PageInput" Name="PART_PageInput"
Value="{TemplateBinding CurrentPage, Mode=TwoWay}" Grid.Column="0"
ShowButtonSpinner="False"
HorizontalContentAlignment="Center"
MinWidth="{Binding $self.Bounds.Height}" MinWidth="{Binding $self.Bounds.Height}"
VerticalAlignment="Center" /> VerticalAlignment="Center"
<TextBlock Name="PART_PageTextBlock" Text="{TemplateBinding CurrentPage}" VerticalAlignment="Center" IsVisible="False"/> HorizontalContentAlignment="Center"
<TextBlock Text="/" ShowButtonSpinner="False"
Margin="8 0" IsVisible="True"
VerticalAlignment="Center" /> Value="{TemplateBinding CurrentPage,
Mode=TwoWay}" />
<TextBlock
Name="PART_PageTextBlock"
Grid.Column="0"
VerticalAlignment="Center"
IsVisible="False"
Text="{TemplateBinding CurrentPage}" />
<TextBlock
Grid.Column="1"
Margin="8,0"
VerticalAlignment="Center"
Text="/" />
<SelectableTextBlock <SelectableTextBlock
Text="{TemplateBinding PageCount}" Grid.Column="2"
VerticalAlignment="Center" /> VerticalAlignment="Center"
</StackPanel> Text="{TemplateBinding PageCount}" />
<u:PaginationButton </Grid>
u:DisabledAdorner.IsEnabled="True" <u:PaginationButton Name="{x:Static u:Pagination.PART_NextButton}" u:DisabledAdorner.IsEnabled="True">
Name="{x:Static u:Pagination.PART_NextButton}">
<PathIcon <PathIcon
Width="12" Width="12"
Height="12" Height="12"
@@ -102,28 +100,23 @@
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^.ReadOnly /template/ TextBlock#PART_PageTextBlock"> <Style Selector="^.ReadOnly /template/ TextBlock#PART_PageTextBlock">
<Setter Property="IsVisible" Value="True"></Setter> <Setter Property="IsVisible" Value="True" />
</Style> </Style>
<Style Selector="^.ReadOnly /template/ u|NumericIntUpDown#PART_PageInput"> <Style Selector="^.ReadOnly /template/ u|NumericUpDown#PART_PageInput">
<Setter Property="IsVisible" Value="False"></Setter> <Setter Property="IsVisible" Value="False" />
</Style> </Style>
</ControlTheme> </ControlTheme>
<ControlTheme x:Key="{x:Type u:PaginationButton}" <ControlTheme x:Key="{x:Type u:PaginationButton}" TargetType="u:PaginationButton">
TargetType="u:PaginationButton"> <Setter Property="Content" Value="{Binding $self.Page}" />
<Setter Property="Content"
Value="{Binding $self.Page}" />
<Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="MinWidth" Value="32" /> <Setter Property="MinWidth" Value="32" />
<Setter Property="MinHeight" Value="32" /> <Setter Property="MinHeight" Value="32" />
<Setter Property="Background" <Setter Property="Background" Value="{DynamicResource PaginationButtonDefaultBackground}" />
Value="{DynamicResource PaginationButtonDefaultBackground}" /> <Setter Property="Foreground" Value="{DynamicResource PaginationButtonDefaultForeground}" />
<Setter Property="Foreground"
Value="{DynamicResource PaginationButtonDefaultForeground}" />
<Setter Property="Cursor" Value="Hand" /> <Setter Property="Cursor" Value="Hand" />
<Setter Property="Template"> <Setter Property="Template">
<ControlTemplate <ControlTemplate TargetType="u:PaginationButton">
TargetType="u:PaginationButton">
<Border <Border
Padding="4" Padding="4"
Background="{TemplateBinding Background}" Background="{TemplateBinding Background}"
@@ -140,12 +133,10 @@
</ControlTemplate> </ControlTemplate>
</Setter> </Setter>
<Style Selector="^:pointerover"> <Style Selector="^:pointerover">
<Setter Property="Background" <Setter Property="Background" Value="{DynamicResource PaginationButtonPointeroverBackground}" />
Value="{DynamicResource PaginationButtonPointeroverBackground}" />
</Style> </Style>
<Style Selector="^:pressed"> <Style Selector="^:pressed">
<Setter Property="Background" <Setter Property="Background" Value="{DynamicResource PaginationButtonPressedBackground}" />
Value="{DynamicResource PaginationButtonPressedBackground}" />
</Style> </Style>
<Style Selector="^:left"> <Style Selector="^:left">
<Setter Property="Content"> <Setter Property="Content">
@@ -192,12 +183,9 @@
</Style> </Style>
</Style> </Style>
<Style Selector="^:selected"> <Style Selector="^:selected">
<Setter Property="Background" <Setter Property="Background" Value="{DynamicResource PaginationButtonSelectedBackground}" />
Value="{DynamicResource PaginationButtonSelectedBackground}" /> <Setter Property="Foreground" Value="{DynamicResource PaginationButtonSelectedForeground}" />
<Setter Property="Foreground" <Setter Property="FontWeight" Value="{DynamicResource TextBlockTitleFontWeight}" />
Value="{DynamicResource PaginationButtonSelectedForeground}" />
<Setter Property="FontWeight"
Value="{DynamicResource TextBlockTitleFontWeight}" />
</Style> </Style>
</ControlTheme> </ControlTheme>

View File

@@ -5,7 +5,7 @@ using Avalonia.Controls.Metadata;
namespace Ursa.Controls; namespace Ursa.Controls;
[PseudoClasses(PC_Left, PC_Right, PC_Selected)] [PseudoClasses(PC_Left, PC_Right, PC_Selected)]
public class PaginationButton: Button public class PaginationButton: RepeatButton
{ {
public const string PC_Left = ":left"; public const string PC_Left = ":left";
public const string PC_Right = ":right"; public const string PC_Right = ":right";