这是依照网上找的资料自行修改,原来的实现很复杂,代码也很多还需要为控件赋数据源,我现在只需要为它赋值一个总条数就行了。
先有一个按钮控件,就是分页上面按钮的图标
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 FYJ.Winui.Pager
{
/// /// ImageButton.xaml 的交互逻辑
/// public partial class ImageButton : UserControl
{
public ImageButton()
{
InitializeComponent();
this.IsEnabledChanged += new DependencyPropertyChangedEventHandler(ImageButton_IsEnabledChanged);
this.btn.Click += btn_Click;
}
public event RoutedEventHandler Click;
void btn_Click(object sender, RoutedEventArgs e)
{
if(Click!=null)
{
Click(sender, e);
}
}
void ImageButton_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.IsEnabled && ImageSource != null)
{
innerImage.Source = ImageSource;
}
else if (!this.IsEnabled && DisabledImageSource != null)
{
innerImage.Source = DisabledImageSource;
}
}
public ImageSource ImageSource
{
get { return (ImageSource)GetValue(ImageSourceProperty); }
set { SetValue(ImageSourceProperty, value); }
}
// Using a DependencyProperty as the backing store for ImageSource. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ImageButton), new UIPropertyMetadata(null));
public ImageSource DisabledImageSource
{
get { return (ImageSource)GetValue(DisabledImageSourceProperty); }
set { SetValue(DisabledImageSourceProperty, value); }
}
// Using a DependencyProperty as the backing store for GrayImageSource. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DisabledImageSourceProperty =
DependencyProperty.Register("DisabledImageSource", typeof(ImageSource), typeof(ImageButton), new UIPropertyMetadata(null));
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (this.IsEnabled && ImageSource != null)
{
innerImage.Source = ImageSource;
}
else if (!this.IsEnabled && DisabledImageSource != null)
{
innerImage.Source = DisabledImageSource;
}
if(this.ImageSource!=null)
{
this.innerImage.Height = this.ImageSource.Height;
this.innerImage.Width = this.ImageSource.Width;
}
}
}
}
下面是完整的xaml
Display to of items
后台代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
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 FYJ.Winui.Pager
{
/// /// PagerUserControl.xaml 的交互逻辑
/// public partial class PagerUserControl : UserControl, INotifyPropertyChanged
{
public PagerUserControl()
{
InitializeComponent();
}
#region 依赖属性和事件
public int PageSize
{
get { return (int)GetValue(PageSizeProperty); }
set { SetValue(PageSizeProperty, value); }
}
// Using a DependencyProperty as the backing store for PageSize. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PageSizeProperty =
DependencyProperty.Register("PageSize", typeof(int), typeof(PagerUserControl), new UIPropertyMetadata(10));
public int Total
{
get { return (int)GetValue(TotalProperty); }
set
{
SetValue(TotalProperty, value);
}
}
// Using a DependencyProperty as the backing store for Total. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TotalProperty =
DependencyProperty.Register("Total", typeof(int), typeof(PagerUserControl), new UIPropertyMetadata(0));
public int PageIndex
{
get { return (int)GetValue(PageIndexProperty); }
set { SetValue(PageIndexProperty, value); }
}
// Using a DependencyProperty as the backing store for PageIndex. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PageIndexProperty =
DependencyProperty.Register("PageIndex", typeof(int), typeof(PagerUserControl), new UIPropertyMetadata(1));
public string PageSizeList
{
get { return (string)GetValue(PageSizeListProperty); }
set { SetValue(PageSizeListProperty, value); }
}
// Using a DependencyProperty as the backing store for PageSizeList. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PageSizeListProperty =
DependencyProperty.Register("PageSizeList", typeof(string), typeof(PagerUserControl), new UIPropertyMetadata("10,20,50,100", (s, e) =>
{
PagerUserControl dp = s as PagerUserControl;
if (dp.PageSizeItems == null) dp.PageSizeItems = new List();
else dp.PageSizeItems.Clear();
dp.RaisePropertyChanged("PageSizeItems");
}));
public static readonly RoutedEvent PageChangedEvent = EventManager.RegisterRoutedEvent("PageChanged", RoutingStrategy.Bubble, typeof(PageChangedEventHandler), typeof(PagerUserControl));
/// /// 分页更改事件
/// public event PageChangedEventHandler PageChanged
{
add
{
AddHandler(PageChangedEvent, value);
}
remove
{
RemoveHandler(PageChangedEvent, value);
}
}
#endregion
#region 通知属性
private List _pageSizeItems;
/// /// 显示每页记录数集合
/// public List PageSizeItems
{
get
{
if (_pageSizeItems == null)
{
_pageSizeItems = new List();
}
if (PageSizeList != null)
{
List strs = PageSizeList.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
_pageSizeItems.Clear();
strs.ForEach(c =>
{
_pageSizeItems.Add(Convert.ToInt32(c));
});
}
return _pageSizeItems;
}
set
{
if (_pageSizeItems != value)
{
_pageSizeItems = value;
RaisePropertyChanged("PageSizeItems");
}
}
}
private int _pageCount;
/// /// 总页数
/// public int PageCount
{
get { return _pageCount; }
set
{
if (_pageCount != value)
{
_pageCount = value;
RaisePropertyChanged("PageCount");
}
}
}
private int _start;
/// /// 开始记录数
/// public int Start
{
get { return _start; }
set
{
if (_start != value)
{
_start = value;
RaisePropertyChanged("Start");
}
}
}
private int _end;
/// /// 结束记录数
/// public int End
{
get { return _end; }
set
{
if (_end != value)
{
_end = value;
RaisePropertyChanged("End");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
#region 字段、属性、委托
public delegate void PageChangedEventHandler(object sender, PageChangedEventArgs args);
private PageChangedEventArgs pageChangedEventArgs;
#endregion
private void btnFirst_Click(object sender, RoutedEventArgs e)
{
PageIndex = 1;
RaisePageChanged();
}
private void btnPrev_Click(object sender, RoutedEventArgs e)
{
if (PageIndex > 1)
{
--PageIndex;
}
RaisePageChanged();
}
private void btnNext_Click(object sender, RoutedEventArgs e)
{
if (Total % PageSize != 0)
{
PageCount = Total / PageSize + 1;
}
else
{
PageCount = Total / PageSize;
}
if (PageIndex < PageCount)
{
++PageIndex;
}
RaisePageChanged();
}
private void btnLast_Click(object sender, RoutedEventArgs e)
{
if (Total % PageSize != 0)
{
PageCount = Total / PageSize + 1;
}
else
{
PageCount = Total / PageSize;
}
PageIndex = PageCount;
RaisePageChanged();
}
private void btnRefresh_Click(object sender, RoutedEventArgs e)
{
RaisePageChanged();
}
private void tbPageIndex_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
tbPageIndex_LostFocus(sender, null);
}
}
private void tbPageIndex_LostFocus(object sender, RoutedEventArgs e)
{
int pIndex = 0;
try
{
pIndex = Convert.ToInt32(tbPageIndex.Text);
}
catch { pIndex = 1; }
if (pIndex < 1) PageIndex = 1;
else if (pIndex > PageCount) PageIndex = PageCount;
else PageIndex = pIndex;
RaisePageChanged();
}
private void cbpPageSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (this.IsLoaded)
{
PageSize = (int)cboPageSize.SelectedItem;
RaisePageChanged();
}
}
#region 引发分页更改事件
/// /// 引发分页更改事件
/// private void RaisePageChanged()
{
if (Total != 0)
{
//计算总页数
if (Total % PageSize != 0)
{
PageCount = Total / PageSize + 1;
}
else
{
PageCount = Total / PageSize;
}
PageIndex = Math.Min(PageCount, PageIndex);
int curCount = Total;
Start = (PageIndex - 1) * PageSize + 1;
//以前的计算有错误吧
//End = Start + curCount - 1;
End = Math.Min(curCount,Start+PageSize-1);
//依赖属性 绑定 不起作用?????????
this.txtFrom.Text = Start+"";
this.txtTo.Text = End + "";
//调整控件的显示
this.tbPageIndex.Text = PageIndex + "";
this.txtTotalPage.Text = PageCount + "";
btnFirst.IsEnabled = btnPrev.IsEnabled = (PageIndex != 1);
btnNext.IsEnabled = btnLast.IsEnabled = (PageIndex != PageCount);
//触发事件
if (pageChangedEventArgs == null)
{
pageChangedEventArgs = new PageChangedEventArgs(PageChangedEvent, PageSize, PageIndex);
}
else
{
pageChangedEventArgs.PageSize = this.PageSize;
pageChangedEventArgs.PageIndex = this.PageIndex;
}
RaiseEvent(pageChangedEventArgs);
}
else
{
Start = End = PageCount = 0;
btnFirst.IsEnabled = btnPrev.IsEnabled = false;
btnNext.IsEnabled = btnLast.IsEnabled = false;
}
}
#endregion
public void Init(int total)
{
this.Dispatcher.Invoke((Action)delegate
{
if (total > 0)
{
int pageCount = 0;
if (total % PageSize != 0)
{
pageCount = total / PageSize + 1;
}
else
{
pageCount = total / PageSize;
}
this.Total = total;
this.PageCount = pageCount;
this.txtTotalPage.Text = pageCount + "";
this.txtFrom.Text = "1";
this.txtTo.Text = PageSize + "";
this.txtTotal.Text = total + "";
}
});
}
}
/// /// 分页更改参数
/// public class PageChangedEventArgs : RoutedEventArgs
{
public int PageSize { get; set; }
public int PageIndex { get; set; }
public PageChangedEventArgs(RoutedEvent routeEvent, int pageSize, int pageIndex)
: base(routeEvent)
{
this.PageSize = pageSize;
this.PageIndex = pageIndex;
}
}
}
珂珂的个人博客 - 一个程序猿的个人网站
6/8/2014 2:12:24 PM 112.90.231....