C#工具:WPF分页
1.使用ItemsControl控件
<UserControl x:Class="SunCreate.Vipf.Client.UI.CityDoor.PageControl"
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="" d:DesignWidth="">
<Grid>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<!--上一页-->
<Button x:Name="btnPrePage" Height="" Background="Transparent" Foreground="#fff" Click="btnPrePage_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
<Button.Template>
<ControlTemplate>
<Border x:Name="border" Background="Transparent" CornerRadius="">
<TextBlock x:Name="txt" Margin="10 0 10 1" Foreground="{TemplateBinding Foreground}" FontSize="{Binding FontSize}" FontWeight="Bold" Text="<<" VerticalAlignment="Center"></TextBlock>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="Background" Value="#6633ccee"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
<!--页码-->
<ItemsControl x:Name="itemsControl">
<ItemsControl.Template>
<ControlTemplate>
<ItemsPresenter></ItemsPresenter>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Button x:Name="btnNum" Height="" Background="Transparent" Click="btnNum_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
<Button.Template>
<ControlTemplate>
<Border x:Name="border" Background="Transparent" CornerRadius="" SnapsToDevicePixels="True">
<TextBlock x:Name="txt" Margin="10 0 10 0" Foreground="{Binding CurrentPageColor}" FontSize="{Binding FontSize}" FontWeight="Bold" Text="{Binding Page}" VerticalAlignment="Center" ></TextBlock>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="Background" Value="#6633ccee"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
<Border Height="" Visibility="{Binding OmitVisible}">
<TextBlock x:Name="txt" Margin="10 0 10 3" Foreground="#fff" FontSize="{Binding FontSize}" Text="…" VerticalAlignment="Center" ></TextBlock>
</Border>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!--下一页-->
<Button x:Name="btnNextPage" Height="" Background="Transparent" Foreground="#fff" Click="btnNextPage_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
<Button.Template>
<ControlTemplate>
<Border x:Name="border" Background="Transparent" CornerRadius="">
<TextBlock x:Name="txt" Margin="10 0 10 1" Foreground="{TemplateBinding Foreground}" FontSize="{Binding FontSize}" FontWeight="Bold" Text=">>" VerticalAlignment="Center"></TextBlock>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="border" Property="Background" Value="#6633ccee"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Button.Template>
</Button>
</StackPanel>
</Grid>
</UserControl>
前台实现代码
2.后台实现代码
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 SunCreate.Vipf.Client.UI.CityDoor
{
/// <summary>
/// 分页控件
/// </summary>
public partial class PageControl : UserControl, INotifyPropertyChanged
{
#region 事件
/// <summary>
/// 分页事件
/// </summary>
public event EventHandler<PageChangedEventArgs> PageChanged;
#endregion #region 变量
private ObservableCollection<PageControlItemModel> _collection = new ObservableCollection<PageControlItemModel>();
private List<PageControlItemModel> _list = null;
#endregion #region 属性
private int _FontSize = ;
/// <summary>
/// 文字字体大小
/// </summary>
public int FontSize
{
get { return _FontSize; }
set
{
_FontSize = value;
OnPropertyChanged("FontSize"); CalcPageNumList(); //计算页码
}
}
#endregion #region 分页相关属性
private int _PageCount = ;
/// <summary>
/// 总页数
/// </summary>
public int PageCount
{
get { return _PageCount; }
set
{
_PageCount = value;
OnPropertyChanged("PageCount");
}
} private int _Page = ;
/// <summary>
/// 当前页码
/// </summary>
public int Page
{
get { return _Page; }
set
{
_Page = value;
OnPropertyChanged("Page"); CalcPageNumList(); //计算页码
}
} private int _RecordCount = ;
/// <summary>
/// 记录总数
/// </summary>
public int RecordCount
{
get { return _RecordCount; }
set
{
_RecordCount = value;
OnPropertyChanged("RecordCount"); CalcPageNumList(); //计算页码
}
} private int _PageSize = ;
/// <summary>
/// 每页记录数
/// </summary>
public int PageSize
{
get { return _PageSize; }
set
{
_PageSize = value;
OnPropertyChanged("PageSize"); CalcPageNumList(); //计算页码
}
} private int _ContinuousCount = ;
/// <summary>
/// 当前页码右边连续页码数
/// </summary>
public int ContinuousCount
{
get { return _ContinuousCount; }
set
{
_ContinuousCount = value;
OnPropertyChanged("_ContinuousCount"); CalcPageNumList(); //计算页码
}
}
#endregion #region 构造函数
public PageControl()
{
InitializeComponent(); this.itemsControl.ItemsSource = _collection;
}
#endregion #region 单击页码事件
private void btnNum_Click(object sender, RoutedEventArgs e)
{
if (PageChanged != null)
{
Button btn = sender as Button;
PageControlItemModel itemModel = btn.CommandParameter as PageControlItemModel;
if (itemModel.Page != Page)
{
Page = itemModel.Page;
CalcPageNumList(); PageChangedEventArgs args = new PageChangedEventArgs(itemModel.Page);
PageChanged(sender, args);
}
}
}
#endregion #region 计算页码
/// <summary>
/// 计算页码
/// </summary>
private void CalcPageNumList()
{
PageCount = (RecordCount - ) / PageSize + ; //计算总页数PageCount _list = new List<PageControlItemModel>(); //第一页
PageControlItemModel item = new PageControlItemModel(, Page);
_list.Add(item); //当前页码连续页码
for (int i = Page - ContinuousCount; i <= Page + ContinuousCount; i++)
{
if (i > && i < PageCount)
{
item = new PageControlItemModel(i, Page);
if (!_list.Exists(a => a.Page == item.Page))
{
_list.Add(item);
}
}
} //最后一页
item = new PageControlItemModel(PageCount, Page);
if (!_list.Exists(a => a.Page == item.Page))
{
_list.Add(item);
} for (int i = _list.Count - ; i > ; i--)
{
if (_list[i].Page - _list[i - ].Page > )
{
_list.Insert(i, new PageControlItemModel(, Page, ));
}
} //上一页下一页
if (Page == )
{
this.btnPrePage.IsEnabled = false;
this.btnPrePage.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#88dddddd"));
}
else
{
this.btnPrePage.IsEnabled = true;
this.btnPrePage.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#fff"));
}
if (Page == PageCount)
{
this.btnNextPage.IsEnabled = false;
this.btnNextPage.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#88dddddd"));
}
else
{
this.btnNextPage.IsEnabled = true;
this.btnNextPage.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#fff"));
} _collection.Clear();
_list.ForEach(a => { _collection.Add(a); });
}
#endregion #region 上一页
private void btnPrePage_Click(object sender, RoutedEventArgs e)
{
int prePage = Page - ;
if (prePage < ) prePage = ;
if (prePage != Page)
{
Page = prePage;
CalcPageNumList(); PageChangedEventArgs args = new PageChangedEventArgs(prePage);
PageChanged(sender, args);
}
}
#endregion #region 下一页
private void btnNextPage_Click(object sender, RoutedEventArgs e)
{
int nextPage = Page + ;
if (nextPage > PageCount) nextPage = PageCount;
if (nextPage != Page)
{
Page = nextPage;
CalcPageNumList(); PageChangedEventArgs args = new PageChangedEventArgs(nextPage);
PageChanged(sender, args);
}
}
#endregion #region INotifyPropertyChanged接口
public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion } #region 分页控件Item Model
/// <summary>
/// 分页控件Item Model
/// </summary>
public class PageControlItemModel : INotifyPropertyChanged
{
private int _Type = ;
/// <summary>
/// 类型(1数字 2省略号)
/// </summary>
public int Type
{
get { return _Type; }
set
{
_Type = value;
OnPropertyChanged("Type"); if (_Type == )
{
NumVisible = Visibility.Visible;
OmitVisible = Visibility.Collapsed;
}
else
{
NumVisible = Visibility.Collapsed;
OmitVisible = Visibility.Visible;
}
}
} private bool _IsCurrentPage;
/// <summary>
/// 是否当前页码
/// </summary>
public bool IsCurrentPage
{
get { return _IsCurrentPage; }
set
{
_IsCurrentPage = value;
OnPropertyChanged("IsCurrentPage"); if (_IsCurrentPage)
{
CurrentPageColor = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#00f0ff"));
}
else
{
CurrentPageColor = new SolidColorBrush(Colors.White);
}
}
} private SolidColorBrush _CurrentPageColor = new SolidColorBrush(Colors.White);
/// <summary>
/// 当前页码颜色
/// </summary>
public SolidColorBrush CurrentPageColor
{
get { return _CurrentPageColor; }
set
{
_CurrentPageColor = value;
OnPropertyChanged("CurrentPageColor");
}
} private int _Page;
/// <summary>
/// 页码
/// </summary>
public int Page
{
get { return _Page; }
set
{
_Page = value;
OnPropertyChanged("Page");
}
} private Visibility _NumVisible = Visibility.Visible;
/// <summary>
/// 数字可见
/// </summary>
public Visibility NumVisible
{
get { return _NumVisible; }
set
{
_NumVisible = value;
OnPropertyChanged("NumVisible");
}
} private Visibility _OmitVisible = Visibility.Collapsed;
/// <summary>
/// 省略号可见
/// </summary>
public Visibility OmitVisible
{
get { return _OmitVisible; }
set
{
_OmitVisible = value;
OnPropertyChanged("OmitVisible");
}
} /// <summary>
/// 分页控件Item Model
/// </summary>
/// <param name="page">页码</param>
/// <param name="currentPage">当前页码</param>
/// <param name="type">类型(1数字 2省略号)</param>
public PageControlItemModel(int page, int currentPage, int type = )
{
Type = type;
Page = page;
IsCurrentPage = page == currentPage;
} #region INotifyPropertyChanged接口
public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion }
#endregion #region 分页事件参数
/// <summary>
/// 分页事件参数
/// </summary>
public class PageChangedEventArgs : EventArgs
{
private int _Page = ;
/// <summary>
/// 当前页码
/// </summary>
public int Page
{
get
{
return _Page;
}
} /// <summary>
/// 分页事件参数
/// </summary>
/// <param name="page">当前页码</param>
public PageChangedEventArgs(int page)
{
_Page = page;
}
}
#endregion }
后台实现代码
C#工具:WPF分页的更多相关文章
- Visual Studio 版本转换工具WPF版开源了
想法的由来 入职一家新公司,领导给了个任务,要编写一个视频监控软件,等我编写调试好,领导满意了以后,这个软件要加入到公司的一个软件系统中去(这个添加工作不用我来做,嘻嘻,看着自己的软件被别人使用,心情 ...
- WPF 分页控件 WPF 多线程 BackgroundWorker
WPF 分页控件 WPF 多线程 BackgroundWorker 大家好,好久没有发表一篇像样的博客了,最近的开发实在头疼,很多东西无从下口,需求没完没了,更要命的是公司的开发从来不走正规流程啊, ...
- 两款不同应用场景的Wpf分页控件
简介 今天给大家分享两个Wpf分页控件,本篇博客主要介绍一些实现思路和使用方法,具体实现和应用代码请参考文末的Demo链接 废话不多说,先看一下效果~ (两款控件显示效果是一样的) 实现思路 一款控件 ...
- 是时候升级你的Js工具了-分页【基于JQ】
好久没有来逛园子,也好久没有更新博客,就像沉睡已久的人忽然被叫醒,忽然就被园友的回复惊醒了.园友提出了关于我之前一篇文章的疑问——可那已经是半年以前的博客了,加上我一直觉得分享给大家的应该是我最新的思 ...
- 工具类 分页工具类PageParamBean
自己编写的分页工具类,根据不同的数据库类型,生成对应的分页sql信息,分享给大家,希望大家共勉,工具类有些地方,大家可能不需要,请根绝自己的需要进行修改使用,核心逻辑都在,如果大家觉得有什么不妥,欢迎 ...
- 查杀进程小工具——WPF和MVVM初体验
最近因为工作需要,研究了一下桌面应用程序.在winform.WPF.Electron等几种技术里,最终选择了WPF作为最后的选型.WPF最吸引我的地方,就是MVVM模式了.MVVM模式完全把界面和业务 ...
- 自定义WPF分页控件
一.分页控件功能说明 实现如上图所示的分页控件,需要实现一下几个功能: 可以设置每页能够展示的最大列数(例如每页8列.每页16列等等). 加载的数组总数量超过设置的每页列数后,需分页展示. 可以直接点 ...
- 自定义MVC框架之工具类-分页类的封装
以前写过一个MVC框架,封装的有点low,经过一段时间的沉淀,打算重新改造下,之前这篇文章封装过一个验证码类. 这次重新改造MVC有几个很大的收获 >全部代码都是用Ubuntu+Vim编写,以前 ...
- WPF 分页控件的实现 -用户控件
效果图:
随机推荐
- java线程同步小结
1.线程同步的目的是为了防止多个线程同时访问一个资源时对资源的破坏 2.线程同步方法是通过锁来实现,每个对象都有切仅有一个锁,这个锁与一个特定的对象关联,线程一旦获取了对象锁,其他访问该对象的线程就无 ...
- MIPCache 域名升级
一.MIPCache URL 是什么 举个例子,MIP 官网的 URL 为: https://www.mipengine.org 对应的 MIPCache 的 URL 为: https://mipca ...
- 欢迎使用IdentityModel文档!- IdentityModel 中文文档(v1.0.0)
IdentityModel是基于声明的身份,OAuth 2.0和OpenID Connect的.NET标准帮助程序库. 它具有以下高级功能: 标准OAuth 2.0和OpenID Connect端点的 ...
- 模板方法模式 Template method 行为型 设计模式(二十六)
模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为 ...
- 20190402-display展现、float浮动
目录 1.display展现 dispaly:"none | block | inline | inline-block | list-item | run-in(主流浏览器不支持) | t ...
- boostrap中模态框显示在阴影之下
boostrap中模态框显示在阴影之下 出现这种情况的原因我开始也搞了很久,问题出现在哪里呢? 有事问百度,在百度上查了一下资料,他们主要的解决办法:是 修改标签的z-index属性的值, 我试着改了 ...
- Android 项目中用得最多最火的第三方框架可能都在这里了
分类 二级分类 框架名称 简介 Star 数 最近更新 UI 刷新 SmartRefreshLayout 智能下拉刷新框架 14k 18天 UI 刷新 Android-PullToRefresh 比较 ...
- redis-dump实现redis库迁移
最近公司有切换redis库的需求,找了个简单的redis迁移方法,不过也有缺点.就是对于实时性要求很高的redis库迁移无法做到数据的实时同步.不过对于简单的redis库备份和迁移还是可以的,各位看官 ...
- SpringCloud的分布式配置及消息总线
1.在搭建分布式配置时,我们大概看下分布式配置的流程 如图所示: 当一个系统中的配置文件发生改变的时候,我们需要重新启动该服务,才能使得新的配置文件生效,spring cloud config可以实现 ...
- NSTimer循环引用的几种解决方案
前言 在iOS中,NSTimer的使用是非常频繁的,但是NSTimer在使用中需要注意,避免循环引用的问题.之前经常这样写: - (void)setupTimer { self.timer = [NS ...