剛接觸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(); }
樣式簡單,不漂亮,一般分頁可以用,界面: