基于WPF自定義分頁(yè)控件的示例代碼
前言
在桌面應(yīng)用程序開發(fā)中,特別是使用WPF框架時(shí),數(shù)據(jù)展示和用戶交互的優(yōu)化至關(guān)重要。當(dāng)處理大量數(shù)據(jù)時(shí),如何有效地進(jìn)行分頁(yè)顯示成為了一個(gè)關(guā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)聽 PageIndexChanged
事件來刷新列表數(shù)據(jù)。
樣式模板
<Style TargetType="{x:Type ctrls:Pager}"> <!-- 省略樣式細(xì)節(jié) --> </Style>
通過自定義樣式模板可以調(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)化了開發(fā)者的負(fù)擔(dān),特別適合那些能夠一次性獲取所有數(shù)據(jù)的情況。
這些控件不僅提升了用戶體驗(yàn),也提高了數(shù)據(jù)展示的效率。對(duì)于開發(fā)來說,理解并合理選用這兩種分頁(yè)控件,可以極大地提升應(yīng)用的性能和易用性。
到此這篇關(guān)于基于WPF自定義分頁(yè)控件的示例代碼的文章就介紹到這了,更多相關(guān)WPF分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#制作網(wǎng)站掛機(jī)程序的實(shí)現(xiàn)示例
本文主要介紹了C#制作網(wǎng)站掛機(jī)程序,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10C# 當(dāng)前系統(tǒng)時(shí)間獲取及時(shí)間格式詳解
這篇文章主要介紹了C# 當(dāng)前系統(tǒng)時(shí)間獲取及時(shí)間格式詳解的相關(guān)資料,這里提供代碼實(shí)例,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下2016-12-12Unity 實(shí)現(xiàn)框選游戲戰(zhàn)斗單位的思路詳解
這篇文章主要介紹了Unity 如何實(shí)現(xiàn)框選游戲戰(zhàn)斗單位,本文簡(jiǎn)單介紹如何實(shí)現(xiàn)即時(shí)戰(zhàn)略游戲中框選戰(zhàn)斗單位的功能,需要的朋友可以參考下2022-12-12C#動(dòng)態(tài)代碼生成控件后其他事件不能獲取該控件值的解決方法
這篇文章主要給大家介紹了關(guān)于C#動(dòng)態(tài)代碼生成控件后其他事件不能獲取該控件值的解決方法,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07C#難點(diǎn)逐個(gè)擊破(1):ref參數(shù)傳遞
一般情況,方法的參數(shù)傳遞是通過值進(jìn)行傳遞的,另一種情況是引用傳遞,大家可以參考下。2010-02-02