欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WPF實(shí)現(xiàn)列表分頁(yè)控件的示例代碼

 更新時(shí)間:2022年10月11日 08:43:25   作者:驚鏵  
這篇文章主要為大家詳細(xì)介紹了如何利用WPF實(shí)現(xiàn)列表分頁(yè)控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下

WPF 之列表分頁(yè)控件

框架使用大于等于.NET40。

Visual Studio 2022

項(xiàng)目使用 MIT 開(kāi)源許可協(xié)議。

新建Pagination自定義控件繼承自Control。

正常模式分頁(yè) 在外部套Grid分為0 - 5列:

  • Grid.Column 0 總頁(yè)數(shù)共多少300條。
  • Grid.Column 1 輸入每頁(yè)顯示多少10條。
  • Grid.Column 2 上一頁(yè)按鈕。
  • Grid.Column 3 所有頁(yè)碼按鈕此處使用ListBox。
  • Grid.Column 4 下一頁(yè)按鈕。
  • Grid.Column 5 跳轉(zhuǎn)頁(yè)1碼輸入框。

精簡(jiǎn)模式分頁(yè) 在外部套Grid分為0 - 9列:

  • Grid.Column 0 總頁(yè)數(shù)共多少300條。
  • Grid.Column 2 輸入每頁(yè)顯示多少10條。
  • Grid.Column 3 條 / 頁(yè)。
  • Grid.Column 5 上一頁(yè)按鈕。
  • Grid.Column 7 跳轉(zhuǎn)頁(yè)1碼輸入框。
  • Grid.Column 9 下一頁(yè)按鈕。

每頁(yè)顯示與跳轉(zhuǎn)頁(yè)碼數(shù)控制只允許輸入數(shù)字,不允許粘貼。

實(shí)現(xiàn)代碼

<ColumnDefinition?Width="Auto"/>
<ColumnDefinition?Width="10"/>
<ColumnDefinition?Width="Auto"/>
<ColumnDefinition?Width="Auto"/>
<ColumnDefinition?Width="10"/>
<ColumnDefinition?Width="Auto"/>
<ColumnDefinition?Width="5"/>
<ColumnDefinition?Width="Auto"/>
<ColumnDefinition?Width="5"/>
<ColumnDefinition?Width="Auto"/>

1) Pagination.cs 如下:

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Windows;
using?System.Windows.Controls;
using?System.Windows.Input;
using?WPFDevelopers.Helpers;

namespace?WPFDevelopers.Controls
{
????[TemplatePart(Name?=?CountPerPageTextBoxTemplateName,?Type?=?typeof(TextBox))]
????[TemplatePart(Name?=?JustPageTextBoxTemplateName,?Type?=?typeof(TextBox))]
????[TemplatePart(Name?=?ListBoxTemplateName,?Type?=?typeof(ListBox))]
????public?class?Pagination?:?Control
????{
????????private?const?string?CountPerPageTextBoxTemplateName?=?"PART_CountPerPageTextBox";
????????private?const?string?JustPageTextBoxTemplateName?=?"PART_JumpPageTextBox";
????????private?const?string?ListBoxTemplateName?=?"PART_ListBox";

????????private?const?string?Ellipsis?=?"···";
????????private?static?readonly?Type?_typeofSelf?=?typeof(Pagination);

????????private?TextBox?_countPerPageTextBox;
????????private?TextBox?_jumpPageTextBox;
????????private?ListBox?_listBox;

????????static?Pagination()
????????{
????????????InitializeCommands();

????????????DefaultStyleKeyProperty.OverrideMetadata(_typeofSelf,?new?FrameworkPropertyMetadata(_typeofSelf));
????????}

????????#region?Override

????????public?override?void?OnApplyTemplate()
????????{
????????????base.OnApplyTemplate();

????????????UnsubscribeEvents();

????????????_countPerPageTextBox?=?GetTemplateChild(CountPerPageTextBoxTemplateName)?as?TextBox;
????????????if?(_countPerPageTextBox?!=?null)
????????????{
????????????????_countPerPageTextBox.ContextMenu?=?null;
????????????????_countPerPageTextBox.PreviewTextInput?+=?_countPerPageTextBox_PreviewTextInput;
????????????????_countPerPageTextBox.PreviewKeyDown?+=?_countPerPageTextBox_PreviewKeyDown;
????????????}

????????????_jumpPageTextBox?=?GetTemplateChild(JustPageTextBoxTemplateName)?as?TextBox;
????????????if?(_jumpPageTextBox?!=?null)
????????????{
????????????????_jumpPageTextBox.ContextMenu?=?null;
????????????????_jumpPageTextBox.PreviewTextInput?+=?_countPerPageTextBox_PreviewTextInput;
????????????????_jumpPageTextBox.PreviewKeyDown?+=?_countPerPageTextBox_PreviewKeyDown;
????????????}

????????????_listBox?=?GetTemplateChild(ListBoxTemplateName)?as?ListBox;

????????????Init();

????????????SubscribeEvents();
????????}

????????private?void?_countPerPageTextBox_PreviewKeyDown(object?sender,?KeyEventArgs?e)
????????{
????????????if?(Key.Space?==?e.Key
????????????????||
????????????????Key.V?==?e.Key
????????????????&&?e.KeyboardDevice.Modifiers?==?ModifierKeys.Control)
????????????????e.Handled?=?true;
????????}

????????private?void?_countPerPageTextBox_PreviewTextInput(object?sender,?TextCompositionEventArgs?e)
????????{
????????????e.Handled?=?ControlsHelper.IsNumber(e.Text);
????????}

????????#endregion

????????#region?Command

????????private?static?void?InitializeCommands()
????????{
????????????PrevCommand?=?new?RoutedCommand("Prev",?_typeofSelf);
????????????NextCommand?=?new?RoutedCommand("Next",?_typeofSelf);

????????????CommandManager.RegisterClassCommandBinding(_typeofSelf,
????????????????new?CommandBinding(PrevCommand,?OnPrevCommand,?OnCanPrevCommand));
????????????CommandManager.RegisterClassCommandBinding(_typeofSelf,
????????????????new?CommandBinding(NextCommand,?OnNextCommand,?OnCanNextCommand));
????????}

????????public?static?RoutedCommand?PrevCommand?{?get;?private?set;?}

????????public?static?RoutedCommand?NextCommand?{?get;?private?set;?}

????????private?static?void?OnPrevCommand(object?sender,?RoutedEventArgs?e)
????????{
????????????var?ctrl?=?sender?as?Pagination;
????????????ctrl.Current--;
????????}

????????private?static?void?OnCanPrevCommand(object?sender,?CanExecuteRoutedEventArgs?e)
????????{
????????????var?ctrl?=?sender?as?Pagination;
????????????e.CanExecute?=?ctrl.Current?>?1;
????????}

????????private?static?void?OnNextCommand(object?sender,?RoutedEventArgs?e)
????????{
????????????var?ctrl?=?sender?as?Pagination;
????????????ctrl.Current++;
????????}

????????private?static?void?OnCanNextCommand(object?sender,?CanExecuteRoutedEventArgs?e)
????????{
????????????var?ctrl?=?sender?as?Pagination;
????????????e.CanExecute?=?ctrl.Current?<?ctrl.PageCount;
????????}

????????#endregion

????????#region?Properties

????????private?static?readonly?DependencyPropertyKey?PagesPropertyKey?=
????????????DependencyProperty.RegisterReadOnly("Pages",?typeof(IEnumerable<string>),?_typeofSelf,
????????????????new?PropertyMetadata(null));

????????public?static?readonly?DependencyProperty?PagesProperty?=?PagesPropertyKey.DependencyProperty;

????????public?IEnumerable<string>?Pages?=>?(IEnumerable<string>)?GetValue(PagesProperty);

????????private?static?readonly?DependencyPropertyKey?PageCountPropertyKey?=
????????????DependencyProperty.RegisterReadOnly("PageCount",?typeof(int),?_typeofSelf,
????????????????new?PropertyMetadata(1,?OnPageCountPropertyChanged));

????????public?static?readonly?DependencyProperty?PageCountProperty?=?PageCountPropertyKey.DependencyProperty;

????????public?int?PageCount?=>?(int)?GetValue(PageCountProperty);

????????private?static?void?OnPageCountPropertyChanged(DependencyObject?d,?DependencyPropertyChangedEventArgs?e)
????????{
????????????var?ctrl?=?d?as?Pagination;
????????????var?pageCount?=?(int)?e.NewValue;

????????????/*
????????????if?(ctrl._jumpPageTextBox?!=?null)
????????????????ctrl._jumpPageTextBox.Maximum?=?pageCount;
????????????*/
????????}

????????public?static?readonly?DependencyProperty?IsLiteProperty?=
????????????DependencyProperty.Register("IsLite",?typeof(bool),?_typeofSelf,?new?PropertyMetadata(false));

????????public?bool?IsLite
????????{
????????????get?=>?(bool)?GetValue(IsLiteProperty);
????????????set?=>?SetValue(IsLiteProperty,?value);
????????}

????????public?static?readonly?DependencyProperty?CountProperty?=?DependencyProperty.Register("Count",?typeof(int),
????????????_typeofSelf,?new?PropertyMetadata(0,?OnCountPropertyChanged,?CoerceCount));

????????public?int?Count
????????{
????????????get?=>?(int)?GetValue(CountProperty);
????????????set?=>?SetValue(CountProperty,?value);
????????}

????????private?static?object?CoerceCount(DependencyObject?d,?object?value)
????????{
????????????var?count?=?(int)?value;
????????????return?Math.Max(count,?0);
????????}

????????private?static?void?OnCountPropertyChanged(DependencyObject?d,?DependencyPropertyChangedEventArgs?e)
????????{
????????????var?ctrl?=?d?as?Pagination;
????????????var?count?=?(int)?e.NewValue;

????????????ctrl.SetValue(PageCountPropertyKey,?(int)?Math.Ceiling(count?*?1.0?/?ctrl.CountPerPage));
????????????ctrl.UpdatePages();
????????}

????????public?static?readonly?DependencyProperty?CountPerPageProperty?=?DependencyProperty.Register("CountPerPage",
????????????typeof(int),?_typeofSelf,?new?PropertyMetadata(50,?OnCountPerPagePropertyChanged,?CoerceCountPerPage));

????????public?int?CountPerPage
????????{
????????????get?=>?(int)?GetValue(CountPerPageProperty);
????????????set?=>?SetValue(CountPerPageProperty,?value);
????????}

????????private?static?object?CoerceCountPerPage(DependencyObject?d,?object?value)
????????{
????????????var?countPerPage?=?(int)?value;
????????????return?Math.Max(countPerPage,?1);
????????}

????????private?static?void?OnCountPerPagePropertyChanged(DependencyObject?d,?DependencyPropertyChangedEventArgs?e)
????????{
????????????var?ctrl?=?d?as?Pagination;
????????????var?countPerPage?=?(int)?e.NewValue;

????????????if?(ctrl._countPerPageTextBox?!=?null)
????????????????ctrl._countPerPageTextBox.Text?=?countPerPage.ToString();

????????????ctrl.SetValue(PageCountPropertyKey,?(int)?Math.Ceiling(ctrl.Count?*?1.0?/?countPerPage));

????????????if?(ctrl.Current?!=?1)
????????????????ctrl.Current?=?1;
????????????else
????????????????ctrl.UpdatePages();
????????}

????????public?static?readonly?DependencyProperty?CurrentProperty?=?DependencyProperty.Register("Current",?typeof(int),
????????????_typeofSelf,?new?PropertyMetadata(1,?OnCurrentPropertyChanged,?CoerceCurrent));

????????public?int?Current
????????{
????????????get?=>?(int)?GetValue(CurrentProperty);
????????????set?=>?SetValue(CurrentProperty,?value);
????????}

????????private?static?object?CoerceCurrent(DependencyObject?d,?object?value)
????????{
????????????var?current?=?(int)?value;
????????????var?ctrl?=?d?as?Pagination;

????????????return?Math.Max(current,?1);
????????}

????????private?static?void?OnCurrentPropertyChanged(DependencyObject?d,?DependencyPropertyChangedEventArgs?e)
????????{
????????????var?ctrl?=?d?as?Pagination;
????????????var?current?=?(int)?e.NewValue;

????????????if?(ctrl._listBox?!=?null)
????????????????ctrl._listBox.SelectedItem?=?current.ToString();

????????????if?(ctrl._jumpPageTextBox?!=?null)
????????????????ctrl._jumpPageTextBox.Text?=?current.ToString();

????????????ctrl.UpdatePages();
????????}

????????#endregion

????????#region?Event

????????///?<summary>
????????///?????分頁(yè)
????????///?</summary>
????????private?void?OnCountPerPageTextBoxChanged(object?sender,?TextChangedEventArgs?e)
????????{
????????????if?(int.TryParse(_countPerPageTextBox.Text,?out?var?_ountPerPage))
????????????????CountPerPage?=?_ountPerPage;
????????}

????????///?<summary>
????????///?????跳轉(zhuǎn)頁(yè)
????????///?</summary>
????????private?void?OnJumpPageTextBoxChanged(object?sender,?TextChangedEventArgs?e)
????????{
????????????if?(int.TryParse(_jumpPageTextBox.Text,?out?var?_current))
????????????????Current?=?_current;
????????}

????????///?<summary>
????????///?????選擇頁(yè)
????????///?</summary>
????????private?void?OnSelectionChanged(object?sender,?SelectionChangedEventArgs?e)
????????{
????????????if?(_listBox.SelectedItem?==?null)
????????????????return;

????????????Current?=?int.Parse(_listBox.SelectedItem.ToString());
????????}

????????#endregion

????????#region?Private

????????private?void?Init()
????????{
????????????SetValue(PageCountPropertyKey,?(int)?Math.Ceiling(Count?*?1.0?/?CountPerPage));

????????????_jumpPageTextBox.Text?=?Current.ToString();
????????????//_jumpPageTextBox.Maximum?=?PageCount;

????????????_countPerPageTextBox.Text?=?CountPerPage.ToString();

????????????if?(_listBox?!=?null)
????????????????_listBox.SelectedItem?=?Current.ToString();
????????}

????????private?void?UnsubscribeEvents()
????????{
????????????if?(_countPerPageTextBox?!=?null)
????????????????_countPerPageTextBox.TextChanged?-=?OnCountPerPageTextBoxChanged;

????????????if?(_jumpPageTextBox?!=?null)
????????????????_jumpPageTextBox.TextChanged?-=?OnJumpPageTextBoxChanged;

????????????if?(_listBox?!=?null)
????????????????_listBox.SelectionChanged?-=?OnSelectionChanged;
????????}

????????private?void?SubscribeEvents()
????????{
????????????if?(_countPerPageTextBox?!=?null)
????????????????_countPerPageTextBox.TextChanged?+=?OnCountPerPageTextBoxChanged;

????????????if?(_jumpPageTextBox?!=?null)
????????????????_jumpPageTextBox.TextChanged?+=?OnJumpPageTextBoxChanged;

????????????if?(_listBox?!=?null)
????????????????_listBox.SelectionChanged?+=?OnSelectionChanged;
????????}

????????private?void?UpdatePages()
????????{
????????????SetValue(PagesPropertyKey,?GetPagers(Count,?Current));

????????????if?(_listBox?!=?null?&&?_listBox.SelectedItem?==?null)
????????????????_listBox.SelectedItem?=?Current.ToString();
????????}

????????private?IEnumerable<string>?GetPagers(int?count,?int?current)
????????{
????????????if?(count?==?0)
????????????????return?null;

????????????if?(PageCount?<=?7)
????????????????return?Enumerable.Range(1,?PageCount).Select(p?=>?p.ToString()).ToArray();

????????????if?(current?<=?4)
????????????????return?new[]?{"1",?"2",?"3",?"4",?"5",?Ellipsis,?PageCount.ToString()};

????????????if?(current?>=?PageCount?-?3)
????????????????return?new[]
????????????????{
????????????????????"1",?Ellipsis,?(PageCount?-?4).ToString(),?(PageCount?-?3).ToString(),?(PageCount?-?2).ToString(),
????????????????????(PageCount?-?1).ToString(),?PageCount.ToString()
????????????????};

????????????return?new[]
????????????{
????????????????"1",?Ellipsis,?(current?-?1).ToString(),?current.ToString(),?(current?+?1).ToString(),?Ellipsis,
????????????????PageCount.ToString()
????????????};
????????}

????????#endregion
????}
}

2) Pagination.xaml 如下:

<ResourceDictionary?xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
????????????????????xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
????????????????????xmlns:input="clr-namespace:System.Windows.Input;assembly=PresentationCore"
????????????????????xmlns:helpers="clr-namespace:WPFDevelopers.Helpers"
????????????????????xmlns:controls="clr-namespace:WPFDevelopers.Controls">

????<ResourceDictionary.MergedDictionaries>
????????<ResourceDictionary?Source="Basic/ControlBasic.xaml"/>
????</ResourceDictionary.MergedDictionaries>

????<Style?x:Key="PageListBoxStyleKey"?TargetType="{x:Type?ListBox}"?
???????????BasedOn="{StaticResource?ControlBasicStyle}">
????????<Setter?Property="Background"?Value="Transparent"/>
????????<Setter?Property="BorderThickness"?Value="0"/>
????????<Setter?Property="Padding"?Value="0"/>
????????<Setter?Property="Template">
????????????<Setter.Value>
????????????????<ControlTemplate?TargetType="{x:Type?ListBox}">
????????????????????<Border?BorderBrush="{TemplateBinding?BorderBrush}"?
????????????????????????????BorderThickness="{TemplateBinding?BorderThickness}"?
????????????????????????????Background="{TemplateBinding?Background}"?
????????????????????????????SnapsToDevicePixels="True">
????????????????????????<ScrollViewer?Focusable="False"?Padding="{TemplateBinding?Padding}">
????????????????????????????<ItemsPresenter?SnapsToDevicePixels="{TemplateBinding?SnapsToDevicePixels}"/>
????????????????????????</ScrollViewer>
????????????????????</Border>
????????????????????<ControlTemplate.Triggers>
????????????????????????<Trigger?Property="IsGrouping"?Value="True">
????????????????????????????<Setter?Property="ScrollViewer.CanContentScroll"?Value="False"/>
????????????????????????</Trigger>
????????????????????</ControlTemplate.Triggers>
????????????????</ControlTemplate>
????????????</Setter.Value>
????????</Setter>
????</Style>

????<Style?x:Key="PageListBoxItemStyleKey"?
???????????TargetType="{x:Type?ListBoxItem}"
???????????BasedOn="{StaticResource?ControlBasicStyle}">
????????<Setter?Property="MinWidth"?Value="32"/>
????????<Setter?Property="Cursor"?Value="Hand"/>
????????<Setter?Property="HorizontalContentAlignment"?Value="Center"/>
????????<Setter?Property="VerticalContentAlignment"?Value="Center"/>
????????<Setter?Property="helpers:ElementHelper.CornerRadius"?Value="3"/>
????????<Setter?Property="BorderThickness"?Value="1"/>
????????<Setter?Property="Padding"?Value="5,0"/>
????????<Setter?Property="Margin"?Value="3,0"/>
????????<Setter?Property="Background"?Value="{DynamicResource?BackgroundSolidColorBrush}"/>
????????<Setter?Property="BorderBrush"?Value="{DynamicResource?BaseSolidColorBrush}"/>
????????<Setter?Property="Template">
????????????<Setter.Value>
????????????????<ControlTemplate?TargetType="{x:Type?ListBoxItem}">
????????????????????<Border?SnapsToDevicePixels="True"
????????????????????????????Background="{TemplateBinding?Background}"?
????????????????????????????BorderThickness="{TemplateBinding?BorderThickness}"?
????????????????????????????BorderBrush="{TemplateBinding?BorderBrush}"??
????????????????????????????Padding="{TemplateBinding?Padding}"
????????????????????????????CornerRadius="{Binding?Path=(helpers:ElementHelper.CornerRadius),RelativeSource={RelativeSource?TemplatedParent}}">
????????????????????????<ContentPresenter?x:Name="PART_ContentPresenter"?
?????????????????????????????????????????HorizontalAlignment="{TemplateBinding?HorizontalContentAlignment}"?
?????????????????????????????????????????VerticalAlignment="{TemplateBinding?VerticalContentAlignment}"
?????????????????????????????????????????RecognizesAccessKey="True"?
?????????????????????????????????????????TextElement.Foreground="{TemplateBinding?Foreground}"/>
????????????????????</Border>
????????????????</ControlTemplate>
????????????</Setter.Value>
????????</Setter>
????????<Style.Triggers>
????????????<DataTrigger?Binding="{Binding?.}"?Value="···">
????????????????<Setter?Property="IsEnabled"?Value="False"/>
????????????????<Setter?Property="FontWeight"?Value="Bold"/>
????????????</DataTrigger>
????????????<Trigger?Property="IsMouseOver"?Value="True">
????????????????<Setter?Property="BorderBrush"?Value="{DynamicResource?DefaultBorderBrushSolidColorBrush}"/>
????????????????<Setter?Property="Background"?Value="{DynamicResource?DefaultBackgroundSolidColorBrush}"/>
????????????????<Setter?Property="Foreground"?Value="{DynamicResource?PrimaryNormalSolidColorBrush}"/>
????????????</Trigger>
????????????<Trigger?Property="IsSelected"?Value="True">
????????????????<Setter?Property="Background"?Value="{DynamicResource?PrimaryPressedSolidColorBrush}"/>
????????????????<Setter?Property="TextElement.Foreground"?Value="{DynamicResource?WindowForegroundColorBrush}"/>
????????????</Trigger>
????????</Style.Triggers>
????</Style>

????<ControlTemplate?x:Key="LitePagerControlTemplate"?TargetType="{x:Type?controls:Pagination}">
????????<Border?Background="{TemplateBinding?Background}"
????????????????BorderBrush="{TemplateBinding?BorderBrush}"
????????????????BorderThickness="{TemplateBinding?BorderThickness}"
????????????????Padding="{TemplateBinding?Padding}">
????????????<Grid>
????????????????<Grid.ColumnDefinitions>
????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????<ColumnDefinition?Width="10"/>
????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????<ColumnDefinition?Width="10"/>
????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????<ColumnDefinition?Width="5"/>
????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????<ColumnDefinition?Width="5"/>
????????????????????<ColumnDefinition?Width="Auto"/>
????????????????</Grid.ColumnDefinitions>
????????????????<TextBlock?VerticalAlignment="Center"
???????????????????????????Text="{Binding?Count,StringFormat=共?{0}?條,RelativeSource={RelativeSource?TemplatedParent}}"/>

???????????????
????????????????<TextBox?Grid.Column="2"?x:Name="PART_CountPerPageTextBox"?
?????????????????????????TextAlignment="Center"?VerticalContentAlignment="Center"
?????????????????????????Width="60"?MinWidth="0"
?????????????????????????input:InputMethod.IsInputMethodEnabled="False"/>
????????????????<TextBlock?Grid.Column="3"?Text="?條?/?頁(yè)"?VerticalAlignment="Center"/>

????????????????<Button?Grid.Column="5"?
????????????????????????Command="{x:Static?controls:Pagination.PrevCommand}">
????????????????????<Path?Width="7"?Height="10"?Stretch="Fill"?
??????????????????????????Fill="{Binding?Foreground,RelativeSource={RelativeSource?AncestorType=Button}}"
??????????????????????????Data="{StaticResource?PathPrevious}"/>
????????????????</Button>

????????????????
????????????????<TextBox?Grid.Column="7"?x:Name="PART_JumpPageTextBox"?
?????????????????????????TextAlignment="Center"?
?????????????????????????VerticalContentAlignment="Center"
?????????????????????????Width="60"?MinWidth="0">
????????????????????<TextBox.ToolTip>
????????????????????????<TextBlock>
????????????????????????????<TextBlock.Text>
????????????????????????????????<MultiBinding?StringFormat="{}{0}/{1}">
????????????????????????????????????<Binding?Path="Current"?RelativeSource="{RelativeSource?TemplatedParent}"/>
????????????????????????????????????<Binding?Path="PageCount"?RelativeSource="{RelativeSource?TemplatedParent}"/>
????????????????????????????????</MultiBinding>
????????????????????????????</TextBlock.Text>
????????????????????????</TextBlock>
????????????????????</TextBox.ToolTip>
????????????????</TextBox>

????????????????<Button?Grid.Column="9"?
????????????????????????Command="{x:Static?controls:Pagination.NextCommand}">
????????????????????<Path?Width="7"?Height="10"?Stretch="Fill"?
??????????????????????????Fill="{Binding?Foreground,RelativeSource={RelativeSource?AncestorType=Button}}"
??????????????????????????Data="{StaticResource?PathNext}"/>
????????????????</Button>
????????????</Grid>
????????</Border>
????</ControlTemplate>

????<Style?TargetType="{x:Type?controls:Pagination}"?
???????????BasedOn="{StaticResource?ControlBasicStyle}">
????????<Setter?Property="Template">
????????????<Setter.Value>
????????????????<ControlTemplate?TargetType="{x:Type?controls:Pagination}">
????????????????????<Border?Background="{TemplateBinding?Background}"
????????????????????????????BorderBrush="{TemplateBinding?BorderBrush}"
????????????????????????????BorderThickness="{TemplateBinding?BorderThickness}"
????????????????????????????Padding="{TemplateBinding?Padding}">
????????????????????????<Grid>
????????????????????????????<Grid.ColumnDefinitions>
????????????????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????????????????<ColumnDefinition?Width="*"/>
????????????????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????????????????<ColumnDefinition?Width="Auto"/>
????????????????????????????</Grid.ColumnDefinitions>
????????????????????????????<TextBlock?Margin="0,0,15,0"?VerticalAlignment="Center"
???????????????????????????????????????Text="{Binding?Count,StringFormat=共?{0}?條,RelativeSource={RelativeSource?TemplatedParent}}"/>

????????????????????????????<StackPanel?Grid.Column="1"?Orientation="Horizontal"?Margin="0,0,15,0"?>
????????????????????????????????<TextBlock?Text="每頁(yè)?"?VerticalAlignment="Center"/>
????????????????????????????????<TextBox?x:Name="PART_CountPerPageTextBox"?
?????????????????????????????????????????TextAlignment="Center"?Width="60"
?????????????????????????????????????????MinWidth="0"?VerticalContentAlignment="Center"
?????????????????????????????????????????FontSize="{TemplateBinding?FontSize}"?
?????????????????????????????????????????input:InputMethod.IsInputMethodEnabled="False"/>
????????????????????????????????<TextBlock?Text="?條"?VerticalAlignment="Center"/>
????????????????????????????</StackPanel>

????????????????????????????<Button?Grid.Column="2"?
????????????????????????????????????Command="{x:Static?controls:Pagination.PrevCommand}">
????????????????????????????????<Path?Width="7"?Height="10"?Stretch="Fill"?
??????????????????????????????????????Fill="{Binding?Foreground,RelativeSource={RelativeSource?AncestorType=Button}}"
??????????????????????????????????????Data="{StaticResource?PathPrevious}"/>
????????????????????????????</Button>

????????????????????????????<ListBox?x:Name="PART_ListBox"?Grid.Column="3"
?????????????????????????????????????SelectedIndex="0"?Margin="5,0"
?????????????????????????????????????ItemsSource="{TemplateBinding?Pages}"
?????????????????????????????????????Style="{StaticResource?PageListBoxStyleKey}"
?????????????????????????????????????ItemContainerStyle="{StaticResource?PageListBoxItemStyleKey}"
?????????????????????????????????????ScrollViewer.HorizontalScrollBarVisibility="Hidden"
?????????????????????????????????????ScrollViewer.VerticalScrollBarVisibility="Hidden">
????????????????????????????????<ListBox.ItemsPanel>
????????????????????????????????????<ItemsPanelTemplate>
????????????????????????????????????????<UniformGrid?Rows="1"/>
????????????????????????????????????</ItemsPanelTemplate>
????????????????????????????????</ListBox.ItemsPanel>
????????????????????????????</ListBox>

????????????????????????????<Button?Grid.Column="4"?
????????????????????????????????????Command="{x:Static?controls:Pagination.NextCommand}">
????????????????????????????????<Path?Width="7"?Height="10"?Stretch="Fill"?
??????????????????????????????????????Fill="{Binding?Foreground,RelativeSource={RelativeSource?AncestorType=Button}}"
??????????????????????????????????????Data="{StaticResource?PathNext}"/>
????????????????????????????</Button>

????????????????????????????<StackPanel?Grid.Column="5"?Orientation="Horizontal">
????????????????????????????????<TextBlock?Text="?前往?"?VerticalAlignment="Center"/>
???????????????????????????????
????????????????????????????????<TextBox?x:Name="PART_JumpPageTextBox"
?????????????????????????????????????????TextAlignment="Center"?
?????????????????????????????????????????ContextMenu="{x:Null}"
?????????????????????????????????????????Width="60"?VerticalContentAlignment="Center"
?????????????????????????????????????????MinWidth="0"
?????????????????????????????????????????FontSize="{TemplateBinding?FontSize}"?/>
????????????????????????????????<TextBlock?Text="?頁(yè)"?VerticalAlignment="Center"/>
????????????????????????????</StackPanel>
????????????????????????</Grid>
????????????????????</Border>
????????????????</ControlTemplate>
????????????</Setter.Value>
????????</Setter>
????????<Style.Triggers>
????????????<Trigger?Property="IsLite"?Value="true">
????????????????<Setter?Property="Template"?Value="{StaticResource?LitePagerControlTemplate}"/>
????????????</Trigger>
????????</Style.Triggers>
????</Style>

</ResourceDictionary>

3) 創(chuàng)建PaginationExampleVM.cs如下:

using?System.Collections.Generic;
using?System.Collections.ObjectModel;
using?System.Linq;

namespace?WPFDevelopers.Samples.ViewModels
{
????public?class?PaginationExampleVM?:?ViewModelBase
????{
????????private?List<int>?_sourceList?=?new?List<int>();

????????public?PaginationExampleVM()
????????{
????????????_sourceList.AddRange(Enumerable.Range(1,?300));
????????????Count?=?300;

????????????CurrentPageChanged();
????????}

????????public?ObservableCollection<int>?PaginationCollection?{?get;?set;?}?=?new?ObservableCollection<int>();

????????private?int?_count;
????????public?int?Count
????????{
????????????get?{?return?_count;?}
????????????set?{?_count?=?value;??this.NotifyPropertyChange("Count");?CurrentPageChanged();?}
????????}

????????private?int?_countPerPage?=?10;
????????public?int?CountPerPage
????????{
????????????get?{?return?_countPerPage;?}
????????????set?{?_countPerPage?=?value;?this.NotifyPropertyChange("CountPerPage");?CurrentPageChanged();?}
????????}

????????private?int?_current?=?1;
????????public?int?Current
????????{
????????????get?{?return?_current;?}
????????????set?{?_current?=?value;?this.NotifyPropertyChange("Current");?CurrentPageChanged();?}
????????}

????????private?void?CurrentPageChanged()
????????{
????????????PaginationCollection.Clear();

????????????foreach?(var?i?in?_sourceList.Skip((Current?-?1)?*?CountPerPage).Take(CountPerPage))
????????????{
????????????????PaginationCollection.Add(i);
????????????}
????????}
????}
}

4) 使用 PaginationExample.xaml 如下:

<UserControl?x:Class="WPFDevelopers.Samples.ExampleViews.PaginationExample"
?????????????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"?
?????????????xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"
?????????????xmlns:local="clr-namespace:WPFDevelopers.Samples.ExampleViews"
?????????????mc:Ignorable="d"?
?????????????d:DesignHeight="450"?d:DesignWidth="800">
????<UserControl.Resources>
????????<Style?TargetType="{x:Type?TextBlock}">
????????????<Setter?Property="Foreground"?Value="{DynamicResource?PrimaryTextSolidColorBrush}"?/>
????????????<Setter?Property="FontSize"?Value="{StaticResource?NormalFontSize}"/>
????????????<Setter?Property="VerticalAlignment"?Value="Center"/>
????????</Style>
????</UserControl.Resources>
????<Grid>
????????<Grid.RowDefinitions>
????????????<RowDefinition?Height="50"/>
????????????<RowDefinition/>
????????????<RowDefinition?Height="40"/>
????????</Grid.RowDefinitions>
????????<Grid.ColumnDefinitions>
????????????<ColumnDefinition?Width="2*"/>
????????????<ColumnDefinition?Width="30"/>
????????????<ColumnDefinition?Width="*"/>
????????</Grid.ColumnDefinitions>
????????<TextBlock?Text="正常模式分頁(yè)"?HorizontalAlignment="Center"?VerticalAlignment="Center"/>
????????<TextBlock?Grid.Column="2"?Text="精簡(jiǎn)模式分頁(yè)"?HorizontalAlignment="Center"?VerticalAlignment="Center"/>

????????<ListBox?Grid.Row="1"?Grid.Column="0"?ItemsSource="{Binding?NormalPaginationViewModel.PaginationCollection}"?Margin="20,0,0,0"/>
????????<ListBox?Grid.Row="1"?Grid.Column="2"?ItemsSource="{Binding?LitePaginationViewModel.PaginationCollection}"?Margin="0,0,20,0"/>

????????<wpfdev:Pagination?Grid.Row="2"?Grid.Column="0"?IsLite="False"??Margin="20,0,0,0"
?????????????????????????????Count="{Binding?NormalPaginationViewModel.Count,Mode=TwoWay}"
?????????????????????????????CountPerPage="{Binding?NormalPaginationViewModel.CountPerPage,Mode=TwoWay}"
?????????????????????????????Current="{Binding?NormalPaginationViewModel.Current,Mode=TwoWay}"/>

????????<wpfdev:Pagination?Grid.Row="2"?Grid.Column="2"?IsLite="true"??Margin="0,0,20,0"
?????????????????????????????Count="{Binding?LitePaginationViewModel.Count,Mode=TwoWay}"
?????????????????????????????CountPerPage="{Binding?LitePaginationViewModel.CountPerPage,Mode=TwoWay}"
?????????????????????????????Current="{Binding?LitePaginationViewModel.Current,Mode=TwoWay}"/>
????</Grid>
</UserControl>

5) 使用PaginationExample.xaml.cs如下:

using?System.Windows.Controls;
using?WPFDevelopers.Samples.ViewModels;

namespace?WPFDevelopers.Samples.ExampleViews
{
????///?<summary>
????///?PaginationExample.xaml?的交互邏輯
????///?</summary>
????public?partial?class?PaginationExample?:?UserControl
????{
????????public?PaginationExampleVM?NormalPaginationViewModel?{?get;?set;?}?=?new?PaginationExampleVM();
????????public?PaginationExampleVM?LitePaginationViewModel?{?get;?set;?}?=?new?PaginationExampleVM();
????????public?PaginationExample()
????????{
????????????InitializeComponent();
????????????this.DataContext?=?this;
????????}
????}
}

實(shí)現(xiàn)效果

以上就是WPF實(shí)現(xiàn)列表分頁(yè)控件的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于WPF列表分頁(yè)控件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#使用Socket上傳并保存圖片的方法

    C#使用Socket上傳并保存圖片的方法

    這篇文章主要介紹了C#使用Socket上傳并保存圖片的方法,涉及C#使用Socket進(jìn)行文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#實(shí)現(xiàn)文件上傳與下載功能實(shí)例

    C#實(shí)現(xiàn)文件上傳與下載功能實(shí)例

    本篇文章主要介紹了C#實(shí)現(xiàn)文件上傳與下載,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2016-12-12
  • 通過(guò)LinQ查詢字符出現(xiàn)次數(shù)的實(shí)例方法

    通過(guò)LinQ查詢字符出現(xiàn)次數(shù)的實(shí)例方法

    這篇文章主要介紹了通過(guò)LinQ查詢字符出現(xiàn)次數(shù)的實(shí)例方法,大家參考使用吧
    2013-11-11
  • C#集合之自定義集合類

    C#集合之自定義集合類

    這篇文章介紹了C#集合之自定義集合類,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#網(wǎng)站生成靜態(tài)頁(yè)面的實(shí)例講解

    C#網(wǎng)站生成靜態(tài)頁(yè)面的實(shí)例講解

    今天小編就為大家分享一篇關(guān)于C#網(wǎng)站生成靜態(tài)頁(yè)面的實(shí)例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • C# windows語(yǔ)音識(shí)別與朗讀實(shí)例

    C# windows語(yǔ)音識(shí)別與朗讀實(shí)例

    這篇文章主要為大家詳細(xì)介紹了C# windows語(yǔ)音識(shí)別與朗讀實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)

    C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Unity圖形學(xué)之ShaderLab入門基礎(chǔ)

    Unity圖形學(xué)之ShaderLab入門基礎(chǔ)

    Unity中所有Shader文件都通過(guò)一種陳述性語(yǔ)言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下
    2022-01-01
  • 基于C#實(shí)現(xiàn)熱鍵注冊(cè)工具類

    基于C#實(shí)現(xiàn)熱鍵注冊(cè)工具類

    這篇文章主要為大家詳細(xì)介紹了一個(gè)驗(yàn)證過(guò)的熱鍵注冊(cè)工具類,使用系統(tǒng)類庫(kù)user32.dll中的RegisterHotkey函數(shù)來(lái)實(shí)現(xiàn)全局熱鍵的注冊(cè),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-12-12
  • winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件

    winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件

    這篇文章主要為大家詳細(xì)介紹了winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論