WPF circle progress bar -


i want replace regular progressbar circle 1 , after shot search here in forum found want.

circularprogressbar.xaml

<grid>     <path x:name="pathroot" stroke="{binding segmentcolor, elementname=usercontrol}"            strokethickness="{binding strokethickness, elementname=usercontrol}" horizontalalignment="left" verticalalignment="top">         <path.data>             <pathgeometry>                 <pathgeometry.figures>                     <pathfigurecollection>                         <pathfigure x:name="pathfigure">                             <pathfigure.segments>                                 <pathsegmentcollection>                                     <arcsegment x:name="arcsegment" sweepdirection="clockwise" />                                 </pathsegmentcollection>                             </pathfigure.segments>                         </pathfigure>                     </pathfigurecollection>                 </pathgeometry.figures>             </pathgeometry>         </path.data>     </path> </grid> 

circularprogressbar.cs:

public partial class circularprogressbar : usercontrol {     public circularprogressbar()     {         initializecomponent();         angle = (percentage * 360) / 100;         renderarc();     }      public int radius     {         { return (int)getvalue(radiusproperty); }         set { setvalue(radiusproperty, value); }     }      public brush segmentcolor     {         { return (brush)getvalue(segmentcolorproperty); }         set { setvalue(segmentcolorproperty, value); }     }      public int strokethickness     {         { return (int)getvalue(strokethicknessproperty); }         set { setvalue(strokethicknessproperty, value); }     }      public double percentage     {         { return (double)getvalue(percentageproperty); }         set { setvalue(percentageproperty, value); }     }      public double angle     {         { return (double)getvalue(angleproperty); }         set { setvalue(angleproperty, value); }     }      // using dependencyproperty backing store percentage.  enables animation, styling, binding, etc...     public static readonly dependencyproperty percentageproperty =         dependencyproperty.register("percentage", typeof(double), typeof(circularprogressbar), new propertymetadata(65d, new propertychangedcallback(onpercentagechanged)));      // using dependencyproperty backing store strokethickness.  enables animation, styling, binding, etc...     public static readonly dependencyproperty strokethicknessproperty =         dependencyproperty.register("strokethickness", typeof(int), typeof(circularprogressbar), new propertymetadata(5, new propertychangedcallback(onthicknesschanged)));      // using dependencyproperty backing store segmentcolor.  enables animation, styling, binding, etc...     public static readonly dependencyproperty segmentcolorproperty =         dependencyproperty.register("segmentcolor", typeof(brush), typeof(circularprogressbar), new propertymetadata(new solidcolorbrush(colors.red), new propertychangedcallback(oncolorchanged)));      // using dependencyproperty backing store radius.  enables animation, styling, binding, etc...     public static readonly dependencyproperty radiusproperty =         dependencyproperty.register("radius", typeof(int), typeof(circularprogressbar), new propertymetadata(25, new propertychangedcallback(onpropertychanged)));      // using dependencyproperty backing store angle.  enables animation, styling, binding, etc...     public static readonly dependencyproperty angleproperty =         dependencyproperty.register("angle", typeof(double), typeof(circularprogressbar), new propertymetadata(120d, new propertychangedcallback(onpropertychanged)));      private static void oncolorchanged(dependencyobject sender, dependencypropertychangedeventargs args)     {         circularprogressbar circle = sender circularprogressbar;         circle.set_color((solidcolorbrush)args.newvalue);     }      private static void onthicknesschanged(dependencyobject sender, dependencypropertychangedeventargs args)     {         circularprogressbar circle = sender circularprogressbar;         circle.set_tick((int)args.newvalue);     }      private static void onpercentagechanged(dependencyobject sender, dependencypropertychangedeventargs args)     {         circularprogressbar circle = sender circularprogressbar;         if (circle.percentage > 100) circle.percentage = 100;         circle.angle = (circle.percentage * 360) / 100;     }      private static void onpropertychanged(dependencyobject sender, dependencypropertychangedeventargs args)     {         circularprogressbar circle = sender circularprogressbar;         circle.renderarc();     }      public void set_tick(int n)     {         pathroot.strokethickness = n;     }      public void set_color(solidcolorbrush n)     {         pathroot.stroke = n;     }      public void renderarc()     {         point startpoint =  new point(radius, 0);         point endpoint = computecartesiancoordinate(angle, radius);         endpoint.x += radius;         endpoint.y += radius;          pathroot.width = radius * 2 + strokethickness;         pathroot.height = radius * 2 + strokethickness;         pathroot.margin = new thickness(strokethickness, strokethickness, 0, 0);          bool largearc = angle > 180.0;          size outerarcsize = new size(radius, radius);          pathfigure.startpoint = startpoint;          if (startpoint.x == math.round(endpoint.x) && startpoint.y == math.round(endpoint.y))             endpoint.x -= 0.01;          arcsegment.point = endpoint;         arcsegment.size = outerarcsize;         arcsegment.islargearc = largearc;     }      private point computecartesiancoordinate(double angle, double radius)     {         // convert radians         double anglerad = (math.pi / 180.0) * (angle - 90);          double x = radius * math.cos(anglerad);         double y = radius * math.sin(anglerad);          return new point(x, y);     } } 

mainwindow.xaml:

    <grid.rowdefinitions>         <rowdefinition height="*"/>         <rowdefinition height="auto"/>     </grid.rowdefinitions>     <stackpanel orientation="horizontal" horizontalalignment="center" verticalalignment="center">         <grid horizontalalignment="center" verticalalignment="center">             <designincontrol:circularprogressbar horizontalalignment="center" verticalalignment="center"               segmentcolor="#ff878889" strokethickness="25" percentage="100" />             <designincontrol:circularprogressbar horizontalalignment="center" verticalalignment="center"               percentage="{binding value, elementname=slider}" segmentcolor="#026873" strokethickness="25" />         </grid>         <grid horizontalalignment="center" verticalalignment="center"/>         <grid horizontalalignment="center" verticalalignment="center"/>         <grid horizontalalignment="center" verticalalignment="center"/>     </stackpanel>     <slider x:name="slider" grid.row="1" maximum="100" value="60" /> </grid> 

and result:

http://s21.postimg.org/xymj8k4pz/image.png

so after copy paste same code solution , running can see slider withou circle bar, code:

<stackpanel orientation="horizontal" horizontalalignment="center" verticalalignment="center" margin="530,303,114,303">     <grid horizontalalignment="center" verticalalignment="center">         <designincontrol:circularprogressbar horizontalalignment="center" verticalalignment="center"          segmentcolor="#ff878889" strokethickness="8" percentage="100" />         <designincontrol:circularprogressbar horizontalalignment="center" verticalalignment="center"          percentage="{binding value, elementname=slider}" segmentcolor="#026873" strokethickness="8" />     </grid> </stackpanel> <slider x:name="slider" maximum="100" value="20" width="200" margin="597,185,227,495" /> 

am doing wrong ?

you missed x:name="usercontrol" in usercontrol definition:

<usercontrol x:name="usercontrol" x:class="designincontrol.circularprogressbar"              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">     <grid>         <path x:name="pathroot" stroke="{binding segmentcolor, elementname=usercontrol}" strokethickness="{binding strokethickness, elementname=usercontrol}" horizontalalignment="left" verticalalignment="top">             <path.data>              ... 

Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -