基于WPF自定义分页控件的示例代码

 更新时间:2025年07月09日 08:26:03   作者:孤独成派  
在桌面应用程序开发中,特别是使用WPF框架时,数据展示和用户交互的优化至关重要,本文将介绍两种不同的分页控件的实现方式,有需要的可以了解下

前言

在桌面应用程序开发中,特别是使用WPF框架时,数据展示和用户交互的优化至关重要。当处理大量数据时,如何有效地进行分页显示成为了一个关键问题。

本文将介绍两种不同的分页控件——通用分页控件 Pager 和自动分页控件 ListPager 的实现方式,并提供相应的XAML和C#代码示例。

分页效果

通用分页控件 Pager

XAML 示例

<DockPanel Margin="10">
    <pp:Pager x:Name="pager" DockPanel.Dock="Top" Margin="0 10">
        <ComboBox x:Name="combo" Padding="6 0" SelectedIndex="0" BorderBrush="#D9D9D9" Foreground="#333" pp:BorderElement.CornerRadius="4" Margin="6 0"
        DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding PageSize,ElementName=pager}" />
    </pp:Pager>
    <ListBox x:Name="list" />
</DockPanel>

该XAML定义了页面顶部的一个 Pager 控件,其中包含一个下拉框用于选择每页显示的条目数。下方是一个 ListBox 用于展示分页后的数据。

后台代码

public PagerView()
{
    InitializeComponent();

    var dic = new Dictionary<Int32, String>
    {
        [10] = "10条/页",
        [20] = "20条/页",
        [30] = "30条/页",
        [40] = "40条/页",
    };

    combo.ItemsSource = dic;
    combo.SelectedValue = 10;

    pager.PageIndexChanged += OnPageIndexChanged;
    pager.TotalCount = datas.Count();
}

private void OnPageIndexChanged(Object sender, EventArgs e)
{
    list.ItemsSource = datas.Skip((pager.PageIndex - 1) * pager.PageSize).Take(pager.PageSize);
}

private IEnumerable<Int32> datas = Enumerable.Range(1, 999);

这段段代码实现了分页逻辑,监听 PageIndexChanged 事件来刷新列表数据。

样式模板

<Style TargetType="{x:Type ctrls:Pager}">
    <!-- 省略样式细节 -->
</Style>

通过自定义样式模板可以调整 Pager 控件的外观,如页码按钮、跳转输入框等。

自动分页控件 ListPager

XAML 示例

<DockPanel Margin="10">
    <pp:ListPager x:Name="pager" DockPanel.Dock="Top" Margin="0 10">
        <ComboBox x:Name="combo" Padding="6 0" SelectedIndex="0" BorderBrush="#D9D9D9" Foreground="#333" pp:BorderElement.CornerRadius="4" Margin="6 0"
                  DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding PageSize,ElementName=pager}" />
    </pp:ListPager>
    <ListBox x:Name="list" ItemsSource="{Binding DisplaySource,ElementName=pager}" />
</DockPanel>

ListPager 控件简化了分页流程,只需设置数据源即可自动完成分页。

后台代码

public ListPagerView()
{
    InitializeComponent();

    var dic = new Dictionary<Int32, String>
    {
        [10] = "10条/页",
        [20] = "20条/页",
        [30] = "30条/页",
        [40] = "40条/页",
    };

    combo.ItemsSource = dic;
    combo.SelectedValue = 10;

    pager.Source = Enumerable.Range(1, 999);
}

相比 PagerListPager 更加便捷,它直接接收全部数据并根据页面大小自动处理分页逻辑。

项目源码

GitHub:github.com/LowPlayer/PP.Wpf

总结

不管是 Pager 还是 ListPager,它们都提供了灵活且强大的分页解决方案,适用于不同的场景需求。Pager 提供了更多的手动控制选项,适合需要定制化分页逻辑的应用;而 ListPager 则简化了开发者的负担,特别适合那些能够一次性获取所有数据的情况。

这些控件不仅提升了用户体验,也提高了数据展示的效率。对于开发来说,理解并合理选用这两种分页控件,可以极大地提升应用的性能和易用性。

到此这篇关于基于WPF自定义分页控件的示例代码的文章就介绍到这了,更多相关WPF分页内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c#获取windows桌面背景代码示例

    c#获取windows桌面背景代码示例

    这篇文章主要介绍了c#获取windows桌面背景的方法,大家参考使用吧
    2013-12-12
  • 详解C#如何在不同工作簿之间复制选定单元格区域

    详解C#如何在不同工作簿之间复制选定单元格区域

    处理Excel文档时,我们经常需要将数据整合到一个工作表以便于我们进行管理或数据对比。本文将演示如何通过编程方式将选定的单元格区域从一个工作簿复制到另一个工作簿
    2023-02-02
  • WPF中下拉框可作选择项也可以作为只读文本框使用的方法

    WPF中下拉框可作选择项也可以作为只读文本框使用的方法

    这篇文章主要给大家介绍了关于WPF中下拉框可以选择项也可以作为只读文本框使用的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • C#使用Spire.XLS for .NET将List数据导出Excel的操作指南

    C#使用Spire.XLS for .NET将List数据导出Excel的操作指南

    在现代数据驱动的应用开发中,将程序内存中的数据以结构化的形式呈现给用户是一个普遍的需求,其中,将C# List集合中的数据导出到Excel文件,成为了开发者们经常需要实现的功能,本文将介绍如何使用 Spire.XLS for .NET将 List<T> 数据写入Excel文件,需要的朋友可以参考下
    2026-02-02
  • C#把写好的类编译成dll文件的操作方法

    C#把写好的类编译成dll文件的操作方法

    在C#中,DLL文件是一种可重用的代码库,它包含了已编译的函数、类、数据和资源,DLL文件可以被多个应用程序共享和重用,这样可以提高代码的复用性和可维护性,所以本文给大家介绍了C#如何把写好的类编译成dll文件,需要的朋友可以参考下
    2024-09-09
  • C#在Windows上调用7-zip实现压缩文件

    C#在Windows上调用7-zip实现压缩文件

    这篇文章主要为大家详细介绍了C#如何在Windows上调用7-zip实现压缩文件,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以学习一下
    2023-10-10
  • C#如何利用结构体对固定格式数据进行解析

    C#如何利用结构体对固定格式数据进行解析

    这篇文章主要为大家详细介绍了C#利用结构体对固定格式数据进行解析,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • c#队列Queue学习示例分享

    c#队列Queue学习示例分享

    队列Queue,先进先出,先生产的货物先出货,后生产的货物后出货,下面看示例学习c#队列Queue
    2013-12-12
  • c#创建Graphics对象的三种方法

    c#创建Graphics对象的三种方法

    通常我们使用下述三种方法来创建一个Graphics对象。
    2013-05-05
  • C#中Class的实例化过程详解

    C#中Class的实例化过程详解

    文章详细阐述了C#中类的成员,包括静态字段、静态构造函数、实例字段等的初始化顺序,在无继承情况下,实例化分为声明时初始化和构造函数中初始化两种,分别有明确的执行顺序,需要的朋友可以参考下
    2024-09-09

最新评论