一,前言
最近项目中开发一个小工具,使用的是C# ,用到分页这一块,也是一边学习一边做项目,但是对于分页而言在网上找到许多资料,说实话有点看不懂,感觉很复杂。不过资料中基本都是围绕触发器来写,自定义插件类,触发器类然后引入项目,感觉很复杂,于是就自己写一个。毕竟分页插件的核心也就是那几点,我将那些类合并成一个。不过自己写出来的扩展性不强,而且代码臃肿,只是实现了现在的需求,贴出来大家学习学习,也希望大佬看到后指点指点。,先看下效果图:需要说明一点,因为项目只是写个小的工具,所以数据存储没有使用数据库,是直接存在文件中的,数据都是从文件中抓取的
二,思路
分页重要属性:总页数,分页数据条数,当前页码,总条数
按钮的变化:我主要是通过flag真假标记来实现
三,代码
1,分页实体类,我是将按钮和分页属性合并在一起直接使用的,我这里只用到了8个按钮,如果需要更多可以自己添加,理论上是无限加长的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//分页数据书体类
namespace Model
{
public class Pages
{
public int pages{ get; set; } //总页数
public int count { get; set; } //每页显示条数
public int sum { get; set; } //总条数
//窗体页面引用四个页按钮,定义为button(1-4)
public int button1 { get; set; }
public int button2 { get; set; }
public int button3 { get; set; }
public int button4 { get; set; }
public int currentPage { get; set; } //当前页
public string text { get; set; }//文本信息
public bool flag1 { get; set; }//判断是否为当前页的标记,对应按钮button1
public bool flag2 { get; set; }//判断是否为当前页的标记,对应按钮button2
public bool flag3 { get; set; }//判断是否为当前页的标记,对应按钮button3
public bool flag4 { get; set; }//判断是否为当前页的标记,对应按钮button4
public bool flag5{ get; set; }//判断是否为当前页的标记,对应按钮首页 定义值为 -10
public bool flag6 { get; set; }//判断是否为当前页的标记,对应按钮尾页 定义值为 -1
public bool flag7 { get; set; }//判断是否为当前页的标记,对应按钮上一页 定义值为 -5
public bool flag8 { get; set; }//判断是否为当前页的标记,对应按钮下一页 定义值为 -6
public bool flag9 { get; set; }//判断是否还有上一页
public bool flag10 { get; set; }//判断是否还有下一页
//判断页的范围区间
public bool page_flag1 { get; set; }
public bool page_flag2 { get; set; }
public bool page_flag3 { get; set; }
public bool page_flag4 { get; set; }
public bool label_flag { get; set; }
}
}
2,xaml:定义好按钮格式
<Grid Grid.Row="3" x:Name="pg" Loaded="pg_Loaded">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="first_button" Click="first_button_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="40px"/>
<Setter Property="Height" Value="30px"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Content" Value="首页"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="10,0,0,0"/>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Tag" Value="1"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border x:Name="boder" BorderThickness="1,1,1,1" BorderBrush="Black" Background="White">
<TextBlock x:Name="text1" Text="首页" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#FF0DD1F0" TargetName="boder"/>
<Setter Property="BorderThickness" Value="1" TargetName="boder"/>
<Setter Property="BorderBrush" Value="#FF0DD1F0" TargetName="boder"/>
</Trigger>
<DataTrigger Binding="{Binding Path=currentPage}" Value="1">
<Setter Property="Background" Value="#FFD7D7D7" TargetName="boder"/>
<Setter Property="BorderThickness" Value="1" TargetName="boder"/>
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Path=flag5}" Value="true">
<Setter Property="Background" Value="#FF0DD1F0" TargetName="boder"/>
<Setter Property="BorderThickness" Value="1" TargetName="boder"/>
<Setter Property="IsEnabled" Value="False"></Setter>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
<Button x:Name="up_button" Click="up_button_Click">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Width" Value="40px"/>
<Setter Property="Height" Value="30px"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Content" Value="<<"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="10,0,0,0"/>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Tag" Value="{Binding currentPage}"></Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border x:Name="boder" BorderThickness="1,1,1,1" BorderBrush="Black" Background="White">
<TextBlock x:Name="text1" Text="<<" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#FF0DD1F0" TargetName="boder"/>
<Setter Property="BorderThickness" Value="1" TargetName="boder"/>
<