WPF 分页控件

刚接触WPF,直接给公司做第一个WPF进销存小项目,分页实用四个button实现的,做完后突然感觉自己太傻了。。。为什么不用自定义用户控件。。于是就写了个简单分页控件

布局:

<UserControl x:Class="Com.FMS.View.UserControls.ZsmPager"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="50" d:DesignWidth="480" Loaded="UserControl_Loaded">
    <Grid>
        <WrapPanel>
            <Button Name="btnFirstPage" Content="首页" Width="40" Margin="2" Click="btnFirstPage_Click"></Button>
            <Button Name="btnPageDown" Content="下一页" Width="50" Margin="2" Click="btnPageDown_Click"></Button>
            <Button Name="btnPageUp" Content="上一页" Width="50" Margin="2" Click="btnPageUp_Click"></Button>
            <Button Name="btnEndPage" Content="尾页" Width="40" Margin="2" Click="btnEndPage_Click"></Button>
            <TextBlock Name="txtPagerInfo" Text="当前第【{0}】页,共【{1}】页,共【{2}】条记录" Margin="5"></TextBlock>
        </WrapPanel>
    </Grid>
</UserControl>

交互逻辑代码中主要就定义了一个委托事件,在页码改变的时候可以激发该事件

//***************************************************
//
// 文件名(FileName)  : ZsmPager.xaml.cs
//
// 作者(Author)      : zsm
//
// 创建时间(CreateAt):  2013-03-13 18:17:05
//
// 描述(Description) : 个人分页控件交互逻辑
//
//***************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Com.FMS.View.UserControls
{
    /// <summary>
    /// 定义页码改变后激发的委托事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    public delegate void PagerIndexChangedEventHandler(object sender, EventArgs e);

    /// <summary>
    /// ZsmPager.xaml 的交互逻辑
    /// </summary>
    public partial class ZsmPager : UserControl
    {
        #region 私有变量
        /// <summary>
        /// 当前页码
        /// </summary>
        private int _pageIndex = 1;
        /// <summary>
        /// 分页大小
        /// </summary>
        private int _pageSize = 15;
        /// <summary>
        /// 记录总数
        /// </summary>
        private int _totalCount = 0;
        /// <summary>
        /// 总页数
        /// </summary>
        private int _pageCount = 0;
        #endregion

        /// <summary>
        /// 构造
        /// </summary>
        public ZsmPager()
        {
            InitializeComponent();
        }

        #region 事件声明
        /// <summary>
        /// 页码改变后的事件
        /// </summary>
        public event PagerIndexChangedEventHandler PagerIndexChanged;
        #endregion

        #region 属性
        /// <summary>
        /// 当前页码
        /// </summary>
        public int PageIndex 
        {
            get { return _pageIndex; }
            set { _pageIndex = value; }
        }

        /// <summary>
        /// 分页大小
        /// </summary>
        public int PageSize
        {
            get { return _pageSize; }
            set { _pageSize = value; }
        }

        /// <summary>
        /// 记录总数
        /// </summary>
        public int TotalCount 
        {
            get { return _totalCount; }
            set 
            {
                _totalCount = value;
                //计算总页数
                _pageCount = (int)Math.Ceiling((double)_totalCount / _pageSize);
                SetPagerInfo(_pageIndex, _pageCount, _totalCount);
            }
        }

        /// <summary>
        /// 总页数
        /// </summary>
        public int PageCount 
        {
            get { return _pageCount; }
            set { _pageCount = value; }
        }

        #endregion

        #region 私有方法
        /// <summary>
        /// 设置分页按钮是否可用
        /// </summary>
        private void SetPageButtonEnabled()
        {
            //确定分页按钮的是否可用
            if (_pageCount <= 1)
            {
                btnPageDown.IsEnabled = false;
                btnPageUp.IsEnabled = false;
                btnEndPage.IsEnabled = false;
            }
            else
            {
                if (_pageIndex == _pageCount)
                {
                    btnPageDown.IsEnabled = false;
                    btnPageUp.IsEnabled = true;
                    btnEndPage.IsEnabled = false;
                }
                else if (_pageIndex <= 1)
                {
                    btnPageDown.IsEnabled = true;
                    btnPageUp.IsEnabled = false;
                    btnEndPage.IsEnabled = true;
                }
                else
                {
                    btnPageDown.IsEnabled = true;
                    btnPageUp.IsEnabled = true;
                    btnEndPage.IsEnabled = true;
                }
            }
        }

        /// <summary>
        /// 设置控件显示信息
        /// </summary>
        /// <param name="pageIndex">当前页码</param>
        /// <param name="pageCount">共有页数</param>
        /// <param name="totalCount">总记录条数</param>
        private void SetPagerInfo(int pageIndex, int pageCount, int totalCount)
        {
            txtPagerInfo.Text = String.Format("当前第【{0}】页,共【{1}】页,共【{2}】条记录", pageIndex, pageCount, totalCount);
        }
        #endregion

        #region 私有事件
        /// <summary>
        /// 控件加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            SetPageButtonEnabled();
        }   

        /// <summary>
        /// 首页按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFirstPage_Click(object sender, RoutedEventArgs e)
        {
            _pageIndex = 1;
            SetPageButtonEnabled();
            PagerIndexChanged(sender, e);
        }

        /// <summary>
        /// 下一页按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPageDown_Click(object sender, RoutedEventArgs e)
        {
            _pageIndex++;
            SetPageButtonEnabled();
            PagerIndexChanged(sender, e);
        }

        /// <summary>
        /// 上一页按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPageUp_Click(object sender, RoutedEventArgs e)
        {
            _pageIndex--;
            SetPageButtonEnabled();
            PagerIndexChanged(sender, e);
        }

        /// <summary>
        /// 尾页按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnEndPage_Click(object sender, RoutedEventArgs e)
        {
            _pageIndex = _pageCount;
            SetPageButtonEnabled();
            PagerIndexChanged(sender, e);
        }
        #endregion
    }
}

使用分页控件时的xaml

<my:ZsmPager x:Name="pagerUser" PagerIndexChanged="pagerUser_PagerIndexChanged" />     

<Window>中添加xmlns:my="clr-namespace:命名空间"

在时实现控件PagerIndexChanged事件即可

/// <summary>
        /// 页码改变时激发该事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pagerUser_PagerIndexChanged(object sender, EventArgs e)
        {
            //DataGrid数据绑定方法
            DgUserDataBind();
        }

样式简单,不漂亮,一般分页可以用,界面:

posted on 2013-03-14 10:26  张世民  阅读(6844)  评论(14编辑  收藏  举报