zoukankan      html  css  js  c++  java
  • WPF分页控件

    最近要写个程序要用到分页控件,找到了很多好高级的,代码拿到了也看不懂。最后找到了一个能看懂的,完善了一下。

    源控件https://www.cnblogs.com/madehua/archive/2011/12/14/2287672.html 

    页面代码

    <UserControl x:Class="WpfCustomControlLibrary.PagerControl"
                 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:local="clr-namespace:WpfCustomControlLibrary"
                 mc:Ignorable="d" 
                 d:DesignHeight="450" d:DesignWidth="800">
        <Grid x:Name="MainGrid">
            <Grid.Resources>
                <Style x:Key="ButtonStyleOne" TargetType="Button">
                    <Setter Property="Margin" Value="5"/>
                    <Setter Property="Background" Value="CadetBlue"/>
                    <Setter Property="VerticalAlignment" Value="Center"/>
                    <Setter Property="Width" Value="55"/>
                    <Setter Property="VerticalAlignment" Value="Center"/>
                    <Style.Triggers>
                        <Trigger Property="IsEnabled" Value="True">
                            <Setter Property="Background" Value="CadetBlue"/>
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Background" Value="Red"/>
                        </Trigger>
                    </Style.Triggers>
                   
                </Style>
    
                <Style x:Key="ButtonTwo" TargetType="Button">
                    <Setter Property="BorderBrush" Value="{x:Null}"/>
                    <Setter Property="Background" Value="White"/>
                    <Setter Property="Width" Value="30"/>
                    <Setter Property="Height" Value="20"/>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Azure"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
                
            </Grid.Resources>
            <StackPanel Orientation="Horizontal" Background="White">
    
                <Button Name="FirstButton" Content="首页" Style="{StaticResource  ButtonStyleOne}" Click="FirstButton_Click" />
               
    
                <Button Name="PreButton" Content="上一页" Style="{StaticResource  ButtonStyleOne}" Click="PreButton_Click" />
                <StackPanel x:Name="ButtonPages" Orientation="Horizontal" Background="White">
                  
                </StackPanel>
               
    
                <Button Name="NextButton" Content="下一页" Style="{StaticResource  ButtonStyleOne}" Click="NextButton_Click" />
                <Button Name="LastButton" Content="尾页" Style="{StaticResource  ButtonStyleOne}" Click="LastButton_Click" />
    
                <TextBlock VerticalAlignment="Center" FontSize="12" > 
                    <TextBlock Text="【共"/>
                    <TextBlock Name="txtCount" Text="" Foreground="Red"/>
                    <TextBlock Text="页】"/> 
                    <TextBlock Text="【当前第"/>
                    <TextBlock Name="txtCurrent" Foreground="Red"/>
                    <TextBlock Text="页】"/>
                     <TextBlock Text="【共"/>
                    <TextBlock Name="txtAll" Foreground="Red"/>
                    <TextBlock Text="条记录】"/>
                </TextBlock>
    
            </StackPanel>
        </Grid>
    </UserControl>
    View Code

    后台代码

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Controls;
    
    using System.Windows.Media;
    
    namespace WpfCustomControlLibrary
    {
        //public delegate void PagerIndexChangingEvent(int pageIndex, EventArgs e);
    
        /// <summary>
        /// PagerControl.xaml 的交互逻辑
        /// </summary>
        public partial class PagerControl : UserControl
        {
            public PagerControl()
            {
                InitializeComponent();
            }
            //public event PagerIndexChangingEvent PageIndexChanging;
    
            /// <summary>
            /// 当前页索引
            /// </summary>
            private int pageIndex = 0;
    
            public int PageIndex
            {
                get { return pageIndex; }
                set { pageIndex = value; }
            }
            /// <summary>
            /// 总页数
            /// </summary>
            private int pageCount;
            /// <summary>
            /// 一页个数
            /// </summary>
            private int pageSize = 12;
    
            public int PageSize
            {
                get { return pageSize; }
                set { pageSize = value; }
            }
    
            public IList Logs { get; set; }//数据源
            public DataGrid dg { get; set; }//装载数据的DateGrid
    
            //数据个数
    
            private int count;
       
            public int Count
            {
                get { return count; }
                set
                {
                    count = value;
                    if (count == 0)
                        pageCount = 0;// ButtonPages.Children.Count+ 
                    else
                        pageCount =  count % pageSize == 0 ? count / pageSize : count / pageSize + 1;
                    txtCount.Text = pageCount.ToString();
                    txtAll.Text = count.ToString();
    
                 
                    if (pageCount<=5&& pageCount> ButtonPages.Children.Count)
                    {
    
                        Button button = new Button();
                        Style myStyle = (Style)MainGrid.FindResource("ButtonTwo");//TabItemStyle 这个样式是引用的资源文件中的样式名称
                        button.Style = myStyle;
                        button.Click += ButtonTwo_Click;
    
                        button.Content = (ButtonPages.Children.Count + 1).ToString();
                        if (ButtonPages.Children.Count == 0) button.Background = Brushes.LightBlue;
                        ButtonPages.Children.Add(button);
                    }
                   
                   
                    Init(null);
                }
            }
    
            public void Init(EventArgs e)
            {
                try
                {
                    InitButton();
                    int temp = pageIndex + 1;
                    if (pageCount == 0)
                        txtCurrent.Text = "0";
                    else
                        txtCurrent.Text = temp.ToString();
                    if (e != null)
                    {
                        //PageIndexChanging(pageIndex, e);
                        ChangeGridPage(Logs,dg);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    
         public   void InitButton()
            {
                this.FirstButton.IsEnabled = true;
                this.PreButton.IsEnabled = true;
                this.NextButton.IsEnabled = true;
                this.LastButton.IsEnabled = true;
                //this.FirstButton.Background = Brushes.CadetBlue;
                //this.PreButton.Background = Brushes.CadetBlue;
                //this.NextButton.Background = Brushes.CadetBlue;
                //this.LastButton.Background = Brushes.CadetBlue;
    
                //总共一页
                if (pageCount < 2)
                {
                    //this.FirstButton.Background = Brushes.Red;
                    //this.PreButton.Background = Brushes.Red;
                    //this.NextButton.Background = Brushes.Red;
                    //this.LastButton.Background = Brushes.Red;
                    this.FirstButton.IsEnabled = false;
                    this.PreButton.IsEnabled = false;
                    this.NextButton.IsEnabled = false;
                    this.LastButton.IsEnabled = false;
    
                    return;
                }
    
                //第一页
                if (pageIndex == 0)
                {
                    //this.FirstButton.Background = Brushes.Ivory;
                    //this.PreButton.Background = Brushes.Ivory;
                    this.FirstButton.IsEnabled = false;
                    this.PreButton.IsEnabled = false;
    
                    return;
                }
    
                //最后一页
                if (pageIndex + 1 == pageCount)
                {
                    //this.NextButton.Background = Brushes.Ivory;
                    //this.LastButton.Background = Brushes.Ivory;
                    this.NextButton.IsEnabled = false;
                    this.LastButton.IsEnabled = false;
    
                }
            }
    
           
            /// <summary>
            /// 首页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void FirstButton_Click(object sender, RoutedEventArgs e)
            {
                if (count == 0) return;
                pageIndex = 0;
                for (int i = 0; i < 5; i++)
                {
                    (ButtonPages.Children[i] as Button).Background = Brushes.White;
                    (ButtonPages.Children[i] as Button).Content = i + 1;
                    if (i == pageIndex)
                    {
                        (ButtonPages.Children[i] as Button).Background = Brushes.LightBlue;
                    }
    
                }
                Init(e);
            }
    
            /// <summary>
            /// 上一页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void PreButton_Click(object sender, RoutedEventArgs e)
            {
                if (pageIndex == 0) return;
                --pageIndex;
                AddAndRemove(pageIndex, sender,e);
                Init(e);
            }
    
            /// <summary>
            /// 下一页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void NextButton_Click(object sender, RoutedEventArgs e)
            {
                if (pageIndex >=count) return;
                ++pageIndex;
                AddAndRemove(pageIndex, sender, e);
                Init(e);
            }
    
            /// <summary>
            /// 尾页
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void LastButton_Click(object sender, RoutedEventArgs e)
            {
                if (count <= 0) return;
                pageIndex = pageCount - 1;
                for (int i = 0; i < 5; i++)
                {
                    (ButtonPages.Children[i] as Button).Background = Brushes.White;
                    (ButtonPages.Children[i] as Button).Content = pageCount - 5 + i + 1;
                    if (pageCount - 5 + i == pageIndex)
                    {
                        (ButtonPages.Children[i] as Button).Background = Brushes.LightBlue;
                    }
    
                }
                Init(e);
            }
    
            private void Button_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
            {
                if (!(sender as Button).IsEnabled)
                {
                    (sender as Button).Background = Brushes.Red;
                }
                else
                {
                    (sender as Button).Background = Brushes.CadetBlue;
                }
    
            }
            private void ButtonTwo_Click(object sender ,RoutedEventArgs e)
            {
    
    
                pageIndex = int.Parse((sender as Button).Content.ToString())-1;
    
                if ((pageCount <= 5 || pageIndex <= 2 || pageIndex >= pageCount - 3) && (int.Parse((ButtonPages.Children[0] as Button).Content.ToString()) == 1 || int.Parse((ButtonPages.Children[4] as Button).Content.ToString()) == pageCount))
                {
                    for (int i = 0; i < ButtonPages.Children.Count; i++)
                    {
                        (ButtonPages.Children[i] as Button).Background = Brushes.White;
                        if ((ButtonPages.Children[i] as Button).Content.ToString() == (pageIndex + 1).ToString())
                        {
                            (ButtonPages.Children[i] as Button).Background = Brushes.LightBlue;
                        }
    
                    }
    
    
                }
                else
                {
                    int Firstindex = pageIndex - 2;
                    if (Firstindex + 5 > pageCount)
                    {
                        Firstindex = pageCount - 5;
    
    
                    }
                    for (int i = 0; i < 5;)
                    {
                        (ButtonPages.Children[i] as Button).Background = Brushes.White;
                        if (Firstindex + 1 <= 0)
                        {
                            Firstindex++;
                            continue;
                        }
                        
    
                        (ButtonPages.Children[i] as Button).Content = Firstindex + 1;
                        if (Firstindex == pageIndex)
                        {
                            (ButtonPages.Children[i] as Button).Background = Brushes.LightBlue;
                        }
                        Firstindex++;
                        i++;
                    }
                }
    
                Init(e);
    
            }
    
            private void AddAndRemove(int Index,object sender,  RoutedEventArgs e)
            {
                pageIndex = Index;
    
                if ((pageCount <= 5 || pageIndex <= 2 || pageIndex >= pageCount - 3)&& (int.Parse((ButtonPages.Children[0] as Button).Content.ToString()) == 1 || int.Parse((ButtonPages.Children[4] as Button).Content.ToString()) == pageCount))
                {
                    for (int i = 0; i < ButtonPages.Children.Count; i++)
                    {
                        (ButtonPages.Children[i] as Button).Background = Brushes.White;
                        if ((ButtonPages.Children[i] as Button).Content.ToString() == (pageIndex + 1).ToString())
                        {
                            (ButtonPages.Children[i] as Button).Background = Brushes.LightBlue;
                        }
    
                    }
    
    
                }
                else
                {
                    int Firstindex = pageIndex - 2;
                    for (int i = 0; i < 5; i++)
                    {
                        (ButtonPages.Children[i] as Button).Background = Brushes.White;
                        (ButtonPages.Children[i] as Button).Content = Firstindex + 1;
                        if (Firstindex == pageIndex)
                        {
                            (ButtonPages.Children[i] as Button).Background = Brushes.LightBlue;
                        }
                        Firstindex++;
                    }
                }
    
                Init(e);
            }
    
           
            private void ChangeGridPage(IList AllLog,DataGrid datagrid)
            {
              
                Count = AllLog.Count;//设置总数据量
                datagrid.Items.Clear();//清空当前数据
    
                int number =PageSize;
                if (AllLog.Count - PageSize * pageIndex < PageSize)
                {
                    //获取当前页数据量,最后一页数据量不满
                    number = AllLog.Count - PageSize * pageIndex;
                }
    
                for (int i = PageSize * pageIndex; i < PageSize * pageIndex+number; i++)
                {
                    datagrid.Items.Add(AllLog[i]);//添加数据
                }
    
    
                //foreach (var item in AllLog.GetRange(PageSize * pageIndex, number))
                //{
                //    datagrid.Items.Add(item);//添加数据
                //}
            }
    
           
    
    
        }
    }
    View Code

    调用页面代码

     xmlns:MyNamespace="clr-namespace:WpfCustomControlLibrary;assembly=WpfCustomControlLibrary"
     //先引用自定义控件项目
    
      <MyNamespace:PagerControl HorizontalAlignment="Right" x:Name="pager" Grid.Row="3">
                
            </MyNamespace:PagerControl>   

    调用页面后台代码

    public MainForm()
            {
               
                InitializeComponent();
               
                pager.PageSize = 30;//设置每页数据量
                pager.Logs = AllLog;//设置数据源IList格式,DataTable尝试传DataTable.Rows,不行就把控件后台代码重写了吧
                pager.dg = datagrid;//装载数据的DataGrid控件
               
    
            }

    有些问题没有处理,不知为何控件IsEnable属性设置为空时,无法改变按钮的颜色。

    跳转没做,因为我的项目总共的数据量也不大,需要的自己加上,只要把Index传给 AddAndRemove(int Index,object sender,  RoutedEventArgs e) 这个方法就好了,

    因为这个方法我是嵌在事件里用的,实际只传Index就可以,其余两个属性照搬事件的属性就好。

  • 相关阅读:
    go-zero尝试运行输出hello-world
    grpc客户端 服务端测试
    protobuf序列化
    protobuff3语法详情
    【转】普通程序员如何转向AI方向
    深度学习微软 azure-云服务器组 centos特殊内核版本 gpu NVIDIA 驱动及CUDA 11.0安装
    分享一个主要用于nas场景的集成了迅雷,百度网盘等软件的docker ubuntu vnc镜像-适用于x86环境
    以spark sql 维护spark streaming offset
    打通es及lucene应用,lucene应用es Query,应用完整的es query
    打通es及lucene应用,lucene应用es Query,结合非queryString查询(二)
  • 原文地址:https://www.cnblogs.com/xwzLoveCshap/p/13292460.html
Copyright © 2011-2022 走看看