您好,欢迎访问三七文档
WPF省略号动画省略号动画可以用于加载数据,等待等多个场景使用,在wpf中要实现省略号动画方式多种多样,但是要通用起来目前笔者还没有看到一个好的结局方案。现在我们一起来做一个通用的省略号动画类,达到像拖控件一样简单。思路,有一个类,我只要实例化它后,传入一个UI元素比如Border或Panel。调用某个方法比如Run,就可以让小圆点跑起来。首先建立一个用来调用的类,取名为:EllipsisRun调用类创建完成。省略号。是6个小圆点。那么我就需要在类里面来创建6个小圆点。小圆点创建好了,那么怎么让小圆点看起来似乎在动呢?通过设置小圆点的样式来实现,比如:先定义三个个样式字段:1.EllipseStyleBase用来设置小圆点的Height,Width,Margin;2.EllipseStyleNormal继承EllipseStyleBase追加Stroke(设置边框颜色)和StrokeThickness(设置边框显示大小);3.EllipseStyleHilight继承EllipseStyleBase追加Fill(设置填充颜色)所以我们需要一个方法来设置这三个样式:我们想设置个默认值怎么样,同时又想自己定义下值,那么我可以用一个方法来设置。我这里使用构造方法来实现。小圆点样式已经完成了,那么我们现在需要让小圆点“动起来”,我们需要创建一个Run方法,传入我们指定的容器,让校园的在这个容器中“动起来”。开来我们还需要添加一些关键性的字段和属性现在小圆点可以跑起来了。在情景中,我们数据加载完了。还需要关闭动画。所以我们还需要一个退出动画的方法来调用,这里我们用End()方法来实现。好的大功告我们来调用下我们的小圆点动画XAMLCS:运行起来看上去还不错哦。下面是完整代码:///summary///省略号动画///用法:///varer=newEllipsisRun();///er.Run(参数:Border或Panel);////summarypublicclassEllipsisRun{privateStyleEllipseStyleBase;privateStyleEllipseStyleNormal;privateStyleEllipseStyleHilight;privateUIElement_Content;///summary///要插入动画的UI元素Border或Panel////summarypublicUIElementTargetParent{get;privateset;}///summary///true动画正在进行中false动画未开始或者已经结束////summarypublicboolIsRun{get;privateset;}///summary///实例化省略号动画动画对象////summarypublicEllipsisRun(){doublehw=8,m=2,s=1;init(hw,hw,m,s,Brushes.BlueViolet);}///summary///实例化省略号动画动画对象///height省略号元素高///width省略号元素宽///margion省略号元素边距///strokeThickness省略号元素裱框///brush省略号元素填充色////summary///paramname=height省略号元素高/param///paramname=width省略号元素宽/param///paramname=margion省略号元素边距/param///paramname=strokeThickness省略号元素裱框/param///paramname=brush省略号元素裱框/parampublicEllipsisRun(doubleheight,doublewidth,doublemargion,doublestrokeThickness,Brushbrush){init(height,width,margion,strokeThickness,brush);}privatevoidinit(doubleh,doublew,doublem,doubles,Brushbrush){EllipseStyleBase=newStyle(typeof(Ellipse));vars_height=newSetter(Ellipse.HeightProperty,h);vars_width=newSetter(Ellipse.WidthProperty,w);vars_margin=newSetter(Ellipse.MarginProperty,newThickness(m));EllipseStyleBase.Setters.Add(s_height);EllipseStyleBase.Setters.Add(s_width);EllipseStyleBase.Setters.Add(s_margin);EllipseStyleNormal=newStyle(typeof(Ellipse),EllipseStyleBase);vars_stroke=newSetter(Ellipse.StrokeProperty,brush);vars_stroke_thickness=newSetter(Ellipse.StrokeThicknessProperty,s);EllipseStyleNormal.Setters.Add(s_stroke);EllipseStyleNormal.Setters.Add(s_stroke_thickness);EllipseStyleHilight=newStyle(typeof(Ellipse),EllipseStyleBase);vars_fill=newSetter(Ellipse.FillProperty,brush);EllipseStyleHilight.Setters.Add(s_fill);}///summary///开始动画///targetUI指定要进行动画UI元素(Border或Panel)///异常:///1.动画进行中///2.targetUI为null或非Border、Panel元素////summary///paramname=targetUI指定要进行动画UI元素(Border或Panel)/param///returns/returnspublicEllipsisRunRun(UIElementtargetUI){if(IsRun)thrownewException(目标正在使用中);ListEllipseitems=null;varparent=createEllipseItems(outitems);if(targetUIisBorder)(targetUIasBorder).Child=parent;elseif(targetUIisPanel)(targetUIasPanel).Children.Add(parent);elsethrownewException(目标ui只能是Panel或Border类型);TargetParent=targetUI;_Content=parent;IsRun=true;vartask=Task.Factory.StartNew(()={intindex=0;while(IsRun){if(index=items.Count)index=0;varindex_last=index-1;if(index_last0)index_last=items.Count-1;varitem_last=items[index_last];varitem_next=items[index];targetUI.Dispatcher.Invoke(()={item_last.Style=EllipseStyleNormal;item_next.Style=EllipseStyleHilight;});index++;Thread.Sleep(120);}});returnthis;}///summary///结束正在进行的动画///异常:///1.动画未进行///2.动画已经结束////summary///returns/returnspublicEllipsisRunEnd(){if(IsRun){IsRun=false;Thread.Sleep(200);if(TargetParentisBorder){(TargetParentasBorder).Child=null;}elseif(TargetParentisPanel){(TargetParentasPanel).Children.Remove(_Content);}returnthis;}elsethrownewException(目标已经停止使用或未开始);}privateWrapPanelcreateEllipseItems(outListEllipselist){list=newListEllipse();varparent=newWrapPanel();parent.VerticalAlignment=VerticalAlignment.Center;parent.HorizontalAlignment=HorizontalAlignment.Center;for(inti=0;i6;i++){varitem=newEllipse();list.Add(item);parent.Children.Add(item);}returnparent;}}
本文标题:WPF省略号动画
链接地址:https://www.777doc.com/doc-2867959 .html