• 星空雅梦


    WPF简单的分页控件实现

     

    XAML代码(使用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="28" d:DesignWidth="450">
    <Grid>
    <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
    <!--上一页-->
    <Button x:Name="btnPrePage" Height="28" Background="Transparent" Foreground="#fff" Click="btnPrePage_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
    <Button.Template>
    <ControlTemplate>
    <Border x:Name="border" Background="Transparent" CornerRadius="2">
    <TextBlock x:Name="txt" Margin="10 0 10 1" Foreground="{TemplateBinding Foreground}" FontSize="{Binding FontSize}" FontWeight="Bold" Text="&lt;&lt;" 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="28" Background="Transparent" Click="btnNum_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
    <Button.Template>
    <ControlTemplate>
    <Border x:Name="border" Background="Transparent" CornerRadius="2" 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="28" 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="28" Background="Transparent" Foreground="#fff" Click="btnNextPage_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
    <Button.Template>
    <ControlTemplate>
    <Border x:Name="border" Background="Transparent" CornerRadius="2">
    <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>

    复制代码
    <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="28" d:DesignWidth="450">
        <Grid>
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                <!--上一页-->
                <Button x:Name="btnPrePage" Height="28" Background="Transparent" Foreground="#fff" Click="btnPrePage_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
                    <Button.Template>
                        <ControlTemplate>
                            <Border x:Name="border" Background="Transparent" CornerRadius="2">
                                <TextBlock x:Name="txt" Margin="10 0 10 1" Foreground="{TemplateBinding Foreground}" FontSize="{Binding FontSize}" FontWeight="Bold" Text="&lt;&lt;" 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="28" Background="Transparent" Click="btnNum_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
                                    <Button.Template>
                                        <ControlTemplate>
                                            <Border x:Name="border" Background="Transparent" CornerRadius="2" 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="28" 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="28" Background="Transparent" Foreground="#fff" Click="btnNextPage_Click" CommandParameter="{Binding}" VerticalAlignment="Center" Visibility="{Binding NumVisible}">
                    <Button.Template>
                        <ControlTemplate>
                            <Border x:Name="border" Background="Transparent" CornerRadius="2">
                                <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>
    复制代码

    后台代码:

    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 = 12;
    /// <summary>
    /// 文字字体大小
    /// </summary>
    public int FontSize
    {
    get { return _FontSize; }
    set
    {
    _FontSize = value;
    OnPropertyChanged("FontSize");

    CalcPageNumList(); //计算页码
    }
    }
    #endregion

    #region 分页相关属性
    private int _PageCount = 1;
    /// <summary>
    /// 总页数
    /// </summary>
    public int PageCount
    {
    get { return _PageCount; }
    set
    {
    _PageCount = value;
    OnPropertyChanged("PageCount");
    }
    }

    private int _Page = 1;
    /// <summary>
    /// 当前页码
    /// </summary>
    public int Page
    {
    get { return _Page; }
    set
    {
    _Page = value;
    OnPropertyChanged("Page");

    CalcPageNumList(); //计算页码
    }
    }

    private int _RecordCount = 0;
    /// <summary>
    /// 记录总数
    /// </summary>
    public int RecordCount
    {
    get { return _RecordCount; }
    set
    {
    _RecordCount = value;
    OnPropertyChanged("RecordCount");

    CalcPageNumList(); //计算页码
    }
    }

    private int _PageSize = 10;
    /// <summary>
    /// 每页记录数
    /// </summary>
    public int PageSize
    {
    get { return _PageSize; }
    set
    {
    _PageSize = value;
    OnPropertyChanged("PageSize");

    CalcPageNumList(); //计算页码
    }
    }

    private int _ContinuousCount = 3;
    /// <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 - 1) / PageSize + 1; //计算总页数PageCount

    _list = new List<PageControlItemModel>();

    //第一页
    PageControlItemModel item = new PageControlItemModel(1, Page);
    _list.Add(item);

    //当前页码连续页码
    for (int i = Page - ContinuousCount; i <= Page + ContinuousCount; i++)
    {
    if (i > 0 && 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 - 1; i > 0; i--)
    {
    if (_list[i].Page - _list[i - 1].Page > 1)
    {
    _list.Insert(i, new PageControlItemModel(0, Page, 2));
    }
    }

    //上一页下一页
    if (Page == 1)
    {
    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 - 1;
    if (prePage < 1) prePage = 1;
    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 + 1;
    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 = 1;
    /// <summary>
    /// 类型(1数字 2省略号)
    /// </summary>
    public int Type
    {
    get { return _Type; }
    set
    {
    _Type = value;
    OnPropertyChanged("Type");

    if (_Type == 1)
    {
    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 = 1)
    {
    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 = 1;
    /// <summary>
    /// 当前页码
    /// </summary>
    public int Page
    {
    get
    {
    return _Page;
    }
    }

    /// <summary>
    /// 分页事件参数
    /// </summary>
    /// <param name="page">当前页码</param>
    public PageChangedEventArgs(int page)
    {
    _Page = page;
    }
    }
    #endregion

    }

    复制代码
    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 = 12;
            /// <summary>
            /// 文字字体大小
            /// </summary>
            public int FontSize
            {
                get { return _FontSize; }
                set
                {
                    _FontSize = value;
                    OnPropertyChanged("FontSize");
    
                    CalcPageNumList(); //计算页码
                }
            }
            #endregion
    
            #region 分页相关属性
            private int _PageCount = 1;
            /// <summary>
            /// 总页数
            /// </summary>
            public int PageCount
            {
                get { return _PageCount; }
                set
                {
                    _PageCount = value;
                    OnPropertyChanged("PageCount");
                }
            }
    
            private int _Page = 1;
            /// <summary>
            /// 当前页码
            /// </summary>
            public int Page
            {
                get { return _Page; }
                set
                {
                    _Page = value;
                    OnPropertyChanged("Page");
    
                    CalcPageNumList(); //计算页码
                }
            }
    
            private int _RecordCount = 0;
            /// <summary>
            /// 记录总数
            /// </summary>
            public int RecordCount
            {
                get { return _RecordCount; }
                set
                {
                    _RecordCount = value;
                    OnPropertyChanged("RecordCount");
    
                    CalcPageNumList(); //计算页码
                }
            }
    
            private int _PageSize = 10;
            /// <summary>
            /// 每页记录数
            /// </summary>
            public int PageSize
            {
                get { return _PageSize; }
                set
                {
                    _PageSize = value;
                    OnPropertyChanged("PageSize");
    
                    CalcPageNumList(); //计算页码
                }
            }
    
            private int _ContinuousCount = 3;
            /// <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 - 1) / PageSize + 1; //计算总页数PageCount
    
                _list = new List<PageControlItemModel>();
    
                //第一页
                PageControlItemModel item = new PageControlItemModel(1, Page);
                _list.Add(item);
    
                //当前页码连续页码
                for (int i = Page - ContinuousCount; i <= Page + ContinuousCount; i++)
                {
                    if (i > 0 && 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 - 1; i > 0; i--)
                {
                    if (_list[i].Page - _list[i - 1].Page > 1)
                    {
                        _list.Insert(i, new PageControlItemModel(0, Page, 2));
                    }
                }
    
                //上一页下一页
                if (Page == 1)
                {
                    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 - 1;
                if (prePage < 1) prePage = 1;
                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 + 1;
                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 = 1;
            /// <summary>
            /// 类型(1数字 2省略号)
            /// </summary>
            public int Type
            {
                get { return _Type; }
                set
                {
                    _Type = value;
                    OnPropertyChanged("Type");
    
                    if (_Type == 1)
                    {
                        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 = 1)
            {
                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 = 1;
            /// <summary>
            /// 当前页码
            /// </summary>
            public int Page
            {
                get
                {
                    return _Page;
                }
            }
    
            /// <summary>
            /// 分页事件参数
            /// </summary>
            /// <param name="page">当前页码</param>
            public PageChangedEventArgs(int page)
            {
                _Page = page;
            }
        }
        #endregion
    
    }
    复制代码

    效果图:

     
    分类: WPF
  • 相关阅读:
    Asp.Net Core 3.1 使用Autofac Aop
    Abp中的工作单元UnitOfWork的Aop是如何实现的
    Asp.Net Core 3.1 Api 集成Abp项目AutoMapper
    Asp.Net Core 3.1 Api 集成Abp项目动态WebApi
    php限制登录次数
    vbs小实例
    php导出数据到excel
    mysqli单例模式连接数据库
    微信JsApi支付
    HTML5新增表单控件
  • 原文地址:https://www.cnblogs.com/LiZhongZhongY/p/10879483.html
Copyright © 2020-2023  润新知