基于WPF自定義分頁(yè)控件的示例代碼
前言
在桌面應(yīng)用程序開(kāi)發(fā)中,特別是使用WPF框架時(shí),數(shù)據(jù)展示和用戶(hù)交互的優(yōu)化至關(guān)重要。當(dāng)處理大量數(shù)據(jù)時(shí),如何有效地進(jìn)行分頁(yè)顯示成為了一個(gè)關(guān)鍵問(wèn)題。
本文將介紹兩種不同的分頁(yè)控件——通用分頁(yè)控件 Pager 和自動(dòng)分頁(yè)控件 ListPager 的實(shí)現(xiàn)方式,并提供相應(yīng)的XAML和C#代碼示例。
分頁(yè)效果

通用分頁(yè)控件 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定義了頁(yè)面頂部的一個(gè) Pager 控件,其中包含一個(gè)下拉框用于選擇每頁(yè)顯示的條目數(shù)。下方是一個(gè) ListBox 用于展示分頁(yè)后的數(shù)據(jù)。
后臺(tái)代碼
public PagerView()
{
InitializeComponent();
var dic = new Dictionary<Int32, String>
{
[10] = "10條/頁(yè)",
[20] = "20條/頁(yè)",
[30] = "30條/頁(yè)",
[40] = "40條/頁(yè)",
};
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);
這段段代碼實(shí)現(xiàn)了分頁(yè)邏輯,監(jiān)聽(tīng) PageIndexChanged 事件來(lái)刷新列表數(shù)據(jù)。
樣式模板
<Style TargetType="{x:Type ctrls:Pager}">
<!-- 省略樣式細(xì)節(jié) -->
</Style>
通過(guò)自定義樣式模板可以調(diào)整 Pager 控件的外觀,如頁(yè)碼按鈕、跳轉(zhuǎn)輸入框等。
自動(dòng)分頁(yè)控件 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 控件簡(jiǎn)化了分頁(yè)流程,只需設(shè)置數(shù)據(jù)源即可自動(dòng)完成分頁(yè)。
后臺(tái)代碼
public ListPagerView()
{
InitializeComponent();
var dic = new Dictionary<Int32, String>
{
[10] = "10條/頁(yè)",
[20] = "20條/頁(yè)",
[30] = "30條/頁(yè)",
[40] = "40條/頁(yè)",
};
combo.ItemsSource = dic;
combo.SelectedValue = 10;
pager.Source = Enumerable.Range(1, 999);
}
相比 Pager,ListPager 更加便捷,它直接接收全部數(shù)據(jù)并根據(jù)頁(yè)面大小自動(dòng)處理分頁(yè)邏輯。
項(xiàng)目源碼
GitHub:github.com/LowPlayer/PP.Wpf
總結(jié)
不管是 Pager 還是 ListPager,它們都提供了靈活且強(qiáng)大的分頁(yè)解決方案,適用于不同的場(chǎng)景需求。Pager 提供了更多的手動(dòng)控制選項(xiàng),適合需要定制化分頁(yè)邏輯的應(yīng)用;而 ListPager 則簡(jiǎn)化了開(kāi)發(fā)者的負(fù)擔(dān),特別適合那些能夠一次性獲取所有數(shù)據(jù)的情況。
這些控件不僅提升了用戶(hù)體驗(yàn),也提高了數(shù)據(jù)展示的效率。對(duì)于開(kāi)發(fā)來(lái)說(shuō),理解并合理選用這兩種分頁(yè)控件,可以極大地提升應(yīng)用的性能和易用性。
到此這篇關(guān)于基于WPF自定義分頁(yè)控件的示例代碼的文章就介紹到這了,更多相關(guān)WPF分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解C#如何在不同工作簿之間復(fù)制選定單元格區(qū)域
處理Excel文檔時(shí),我們經(jīng)常需要將數(shù)據(jù)整合到一個(gè)工作表以便于我們進(jìn)行管理或數(shù)據(jù)對(duì)比。本文將演示如何通過(guò)編程方式將選定的單元格區(qū)域從一個(gè)工作簿復(fù)制到另一個(gè)工作簿2023-02-02
WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法
這篇文章主要給大家介紹了關(guān)于WPF中下拉框可以選擇項(xiàng)也可以作為只讀文本框使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02
C#使用Spire.XLS for .NET將List數(shù)據(jù)導(dǎo)出Excel的操作指南
在現(xiàn)代數(shù)據(jù)驅(qū)動(dòng)的應(yīng)用開(kāi)發(fā)中,將程序內(nèi)存中的數(shù)據(jù)以結(jié)構(gòu)化的形式呈現(xiàn)給用戶(hù)是一個(gè)普遍的需求,其中,將C# List集合中的數(shù)據(jù)導(dǎo)出到Excel文件,成為了開(kāi)發(fā)者們經(jīng)常需要實(shí)現(xiàn)的功能,本文將介紹如何使用 Spire.XLS for .NET將 List<T> 數(shù)據(jù)寫(xiě)入Excel文件,需要的朋友可以參考下2026-02-02
C#把寫(xiě)好的類(lèi)編譯成dll文件的操作方法
在C#中,DLL文件是一種可重用的代碼庫(kù),它包含了已編譯的函數(shù)、類(lèi)、數(shù)據(jù)和資源,DLL文件可以被多個(gè)應(yīng)用程序共享和重用,這樣可以提高代碼的復(fù)用性和可維護(hù)性,所以本文給大家介紹了C#如何把寫(xiě)好的類(lèi)編譯成dll文件,需要的朋友可以參考下2024-09-09
C#在Windows上調(diào)用7-zip實(shí)現(xiàn)壓縮文件
這篇文章主要為大家詳細(xì)介紹了C#如何在Windows上調(diào)用7-zip實(shí)現(xiàn)壓縮文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以學(xué)習(xí)一下2023-10-10
C#如何利用結(jié)構(gòu)體對(duì)固定格式數(shù)據(jù)進(jìn)行解析
這篇文章主要為大家詳細(xì)介紹了C#利用結(jié)構(gòu)體對(duì)固定格式數(shù)據(jù)進(jìn)行解析,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
c#創(chuàng)建Graphics對(duì)象的三種方法
通常我們使用下述三種方法來(lái)創(chuàng)建一個(gè)Graphics對(duì)象。2013-05-05

