定制型网站建设渠道,外贸怎么做网站外链,企业网站内容如何备案,手机端搜索引擎排名想做个分页控件#xff0c;想了想逻辑实现太复杂了#xff0c;这不#xff0c;用奇怪的方式实现了它#xff0c;就如这张图一样。。。看看效果#xff1a;下面就直接粘代码喽#xff1a;新建一个Pagination类#xff1a;using System;
using System.Collections.Generic… 想做个分页控件想了想逻辑实现太复杂了这不用奇怪的方式实现了它就如这张图一样。。。看看效果下面就直接粘代码喽新建一个Pagination类using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;namespace WPFDemos
{public class Pagination : Control{private Button _btnPrev null;private Button _btnOne null;private Button _btnDotPrev null;private Button _btnCenterOne null;private Button _btnCenterTwo null;private Button _btnCenterThree null;private Button _btnCenterFour null;private Button _btnCenterFive null;private Button _btnDotNext null;private Button _btnLast null;private Button _btnNext null;public int PageCount{get { return (int)GetValue(PageCountProperty); }set { SetValue(PageCountProperty, value); }}public static readonly DependencyProperty PageCountProperty DependencyProperty.Register(PageCount, typeof(int), typeof(Pagination), new PropertyMetadata(1, (d, e) {if (!(d is Pagination pagination)) return;var page (int)e.NewValue;pagination.IsSimple page 6;}));public bool IsSimple{get { return (bool)GetValue(IsSimpleProperty); }set { SetValue(IsSimpleProperty, value); }}public static readonly DependencyProperty IsSimpleProperty DependencyProperty.Register(IsSimple, typeof(bool), typeof(Pagination), new PropertyMetadata(false));public int CurrentPage{get { return (int)GetValue(CurrentPageProperty); }set { SetValue(CurrentPageProperty, value); }}public static readonly DependencyProperty CurrentPageProperty DependencyProperty.Register(CurrentPage, typeof(int), typeof(Pagination), new PropertyMetadata(1, (d, e) {if (!(d is Pagination pagination)) return;if (pagination.PageCount 5){pagination.UpdateControl();}else{pagination.UpdateControlSimple();}}));public override void OnApplyTemplate(){base.OnApplyTemplate();if (PageCount 5){InitControls();}else{InitControlsSimple();}}private ListButton _simpleButtons new ListButton();private void InitControlsSimple(){_btnPrev GetTemplateChild(btnPrev) as Button;_btnCenterOne GetTemplateChild(btnCenterOne) as Button;_btnCenterTwo GetTemplateChild(btnCenterTwo) as Button;_btnCenterThree GetTemplateChild(btnCenterThree) as Button;_btnCenterFour GetTemplateChild(btnCenterFour) as Button;_btnCenterFive GetTemplateChild(btnCenterFive) as Button;_btnNext GetTemplateChild(btnNext) as Button;_simpleButtons.Clear();_simpleButtons.Add(_btnCenterOne);_simpleButtons.Add(_btnCenterTwo);_simpleButtons.Add(_btnCenterThree);_simpleButtons.Add(_btnCenterFour);_simpleButtons.Add(_btnCenterFive);BindClickSimple();UpdateControlSimple();}private void UpdateControlSimple(){_btnCenterOne.Visibility PageCount 1 ? Visibility.Visible : Visibility.Collapsed;_btnCenterTwo.Visibility PageCount 2 ? Visibility.Visible : Visibility.Collapsed;_btnCenterThree.Visibility PageCount 3 ? Visibility.Visible : Visibility.Collapsed;_btnCenterFour.Visibility PageCount 4 ? Visibility.Visible : Visibility.Collapsed;_btnCenterFive.Visibility PageCount 5 ? Visibility.Visible : Visibility.Collapsed;_btnPrev.IsEnabled CurrentPage 1;_btnNext.IsEnabled CurrentPage PageCount;_btnCenterOne.Background _btnCenterTwo.Background _btnCenterThree.Background _btnCenterFour.Background _btnCenterFive.Background Brushes.LightBlue;_simpleButtons[CurrentPage - 1].Background Brushes.Green;}private void BindClickSimple(){_btnPrev.Click (s, e) CurrentPage - 1;_btnCenterOne.Click (s, e) CurrentPage 1;_btnCenterTwo.Click (s, e) CurrentPage 2;_btnCenterThree.Click (s, e) CurrentPage 3;_btnCenterFour.Click (s, e) CurrentPage 4;_btnCenterFive.Click (s, e) CurrentPage 5;_btnNext.Click (s, e) CurrentPage 1;}private void InitControls(){_btnPrev GetTemplateChild(btnPrev) as Button;_btnOne GetTemplateChild(btnOne) as Button;_btnDotPrev GetTemplateChild(btnDotPrev) as Button;_btnCenterOne GetTemplateChild(btnCenterOne) as Button;_btnCenterTwo GetTemplateChild(btnCenterTwo) as Button;_btnCenterThree GetTemplateChild(btnCenterThree) as Button;_btnCenterFour GetTemplateChild(btnCenterFour) as Button;_btnCenterFive GetTemplateChild(btnCenterFive) as Button;_btnDotNext GetTemplateChild(btnDotNext) as Button;_btnLast GetTemplateChild(btnLast) as Button;_btnNext GetTemplateChild(btnNext) as Button;BindClick();UpdateControl();}private void BindClick(){_btnPrev.Click (s, e) SetIndex(-1);_btnOne.Click (s, e) SetIndex(1 - CurrentPage);_btnDotPrev.Click (s, e) SetIndex(-3);_btnCenterOne.Click (s, e) SetIndex(-2);_btnCenterTwo.Click (s, e) SetIndex(-1);_btnCenterFour.Click (s, e) SetIndex(1);_btnCenterFive.Click (s, e) SetIndex(2);_btnDotNext.Click (s, e) SetIndex(3);_btnLast.Click (s, e) SetIndex(PageCount - CurrentPage);_btnNext.Click (s, e) SetIndex(1);}public void SetIndex(int page){if (page 0){if (CurrentPage page 0){CurrentPage page;}}else if (page 0){if (CurrentPage page PageCount){CurrentPage page;}}}private void UpdateControl(){_btnPrev.IsEnabled CurrentPage 1;_btnOne.Visibility CurrentPage 4 ? Visibility.Collapsed : Visibility.Visible;_btnDotPrev.Visibility CurrentPage 4 ? Visibility.Collapsed : Visibility.Visible;_btnCenterOne.Visibility CurrentPage ! 3 CurrentPage ! PageCount ? Visibility.Collapsed : Visibility.Visible;_btnCenterTwo.Visibility CurrentPage 1 || (PageCount - CurrentPage) 2 ? Visibility.Collapsed : Visibility.Visible;_btnCenterFour.Visibility CurrentPage 3 || CurrentPage PageCount ? Visibility.Collapsed : Visibility.Visible;_btnCenterFive.Visibility CurrentPage ! 1 (PageCount - CurrentPage) ! 2 ? Visibility.Collapsed : Visibility.Visible;_btnDotNext.Visibility PageCount - CurrentPage 3 ? Visibility.Collapsed : Visibility.Visible;_btnLast.Visibility PageCount - CurrentPage 3 ? Visibility.Collapsed : Visibility.Visible;_btnNext.IsEnabled CurrentPage ! PageCount;_btnOne.Content 1;_btnCenterOne.Content CurrentPage - 2;_btnCenterTwo.Content CurrentPage - 1;_btnCenterThree.Content CurrentPage;_btnCenterFour.Content CurrentPage 1;_btnCenterFive.Content CurrentPage 2;_btnLast.Content PageCount;}}
}
在App.xaml内新增样式 Style x:KeyPageBtn TargetTypeButtonSetter PropertyFocusVisualStyle Value{x:Null}/Setter PropertyMinWidth Value35/Setter PropertyMargin Value3 0/Setter PropertyPadding Value0/Setter PropertyBackground ValueLightBlue/Setter PropertyTemplateSetter.ValueControlTemplate TargetTypeButtonBorder x:Nameborder CornerRadius6 Background{TemplateBinding Background}ContentPresenter HorizontalAlignmentCenter VerticalAlignmentCenter Margin5//BorderControlTemplate.TriggersTrigger PropertyIsMouseOver ValueTrue SourceNameborderSetter PropertyBackground ValueRed TargetNameborder//TriggerTrigger PropertyIsEnabled ValueFalseSetter PropertyBackground ValueGray TargetNameborder//Trigger/ControlTemplate.Triggers/ControlTemplate/Setter.Value/Setter
/StyleStyle x:KeyPageCurrent TargetTypeButtonSetter PropertyFocusVisualStyle Value{x:Null}/Setter PropertyMinWidth Value35/Setter PropertyMargin Value3 0/Setter PropertyPadding Value0/Setter PropertyTemplateSetter.ValueControlTemplate TargetTypeButtonBorder x:Nameborder CornerRadius6 BackgroundGreenContentPresenter HorizontalAlignmentCenter VerticalAlignmentCenter Margin5//Border/ControlTemplate/Setter.Value/Setter
/StyleStyle TargetTypelocal:PaginationSetter PropertyFocusVisualStyle Value{x:Null}/Setter PropertyTemplateSetter.ValueControlTemplate TargetTypelocal:PaginationStackPanel OrientationHorizontalButton Style{StaticResource PageBtn} x:NamebtnPrev Content上一页/ButtonButton Style{StaticResource PageBtn} x:NamebtnOne Content1/ButtonButton Style{StaticResource PageBtn} x:NamebtnDotPrev Content.../ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterOne Content1/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterTwo Content2/ButtonButton Style{StaticResource PageCurrent} x:NamebtnCenterThree Content3/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterFour Content4/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterFive Content5/ButtonButton Style{StaticResource PageBtn} x:NamebtnDotNext Content.../ButtonButton Style{StaticResource PageBtn} x:NamebtnLast Content5/ButtonButton Style{StaticResource PageBtn} x:NamebtnNext Content下一页/Button/StackPanel/ControlTemplate/Setter.Value/SetterStyle.TriggersTrigger PropertyIsSimple ValueTrueSetter PropertyTemplate Setter.ValueControlTemplate TargetTypelocal:PaginationStackPanel OrientationHorizontalButton Style{StaticResource PageBtn} x:NamebtnPrev Content上一页/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterOne Content1/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterTwo Content2/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterThree Content3/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterFour Content4/ButtonButton Style{StaticResource PageBtn} x:NamebtnCenterFive Content5/ButtonButton Style{StaticResource PageBtn} x:NamebtnNext Content下一页/Button/StackPanel/ControlTemplate/Setter.Value/Setter/Trigger/Style.Triggers
/Style
MainWindow测试代码如下Window x:ClassWPFDemos.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WPFDemosmc:Ignorabledx:NamewidnowWindowStartupLocationCenterScreenUseLayoutRoundingTrueBackgroundWhiteFontSize16Title分页 Height500 Width1000GridStackPanel HorizontalAlignmentCenter VerticalAlignmentCenterlocal:Pagination x:Namepag0 PageCount3 Height35 HorizontalAlignmentCenter/TextBlock Margin10 HorizontalAlignmentCenterRun Text当前页/Run Text{Binding CurrentPage,ElementNamepag0}//TextBlocklocal:Pagination x:Namepag PageCount5 Height35 HorizontalAlignmentCenter/TextBlock Margin10 HorizontalAlignmentCenterRun Text当前页/Run Text{Binding CurrentPage,ElementNamepag}//TextBlocklocal:Pagination x:Namepag1 PageCount35 Height35 /TextBlock Margin10 HorizontalAlignmentCenterRun Text当前页/Run Text{Binding CurrentPage,ElementNamepag1}//TextBlock/StackPanel/Grid
/Window效果图以上就是全部代码喽喜欢的小伙伴点个赞吧~