Want to write a ProgressBar style that shows different colors of progress bar when progress value is different
1. Write converter
Public classProgressbarvalueconverter:ivalueconverter { Public ObjectConvert (ObjectValue, Type TargetType,Objectparameter, System.Globalization.CultureInfo culture) { Doublev = (Double) value; stringImageuri =".. /images/progress Bar_1.png"; if(V > the) {Imageuri=".. /images/progress Bar_3.png"; } Else if(V > -) {Imageuri=".. /images/progress Bar_2.png"; } BitmapImage img=NewBitmapImage (NewUri (Imageuri, urikind.relative)); returnimg; } Public ObjectConvertback (ObjectValue, Type TargetType,Objectparameter, System.Globalization.CultureInfo culture) { Throw Newnotimplementedexception (); } }
2. Create a Style
<C:progressbarvalueconverterx:key= "Pbconverter"/> <Stylex:key= "Progressbarstyle"TargetType="{x:type ProgressBar}"> <Setter Property= "Template"> <Setter.value> <ControlTemplate> <Grid> <ImageName= "Part_track"Source=".. /images/progress bar.png "HorizontalAlignment= "Left"Stretch= "Fill"/> <ImageName= "PART_Indicator"Source="{Binding Relativesource={relativesource templatedparent}, Path=value, Converter={staticresource PbConverter}} "HorizontalAlignment= "Left"Stretch= "Fill"/> </Grid> </ControlTemplate> </Setter.value> </Setter> </Style>
3. Set the style of the progress bar
Progress Bar.png:
Progress Bar_1.png:
Progress Bar_2.png:
Progress Bar_3.png:
------------------------------------------------------------------
If you only want to create a flat progress bar, the converter can not write
<style x:key="Flatprogressbar"Targettype="{x:type ProgressBar}"> <setter property="Template"> <Setter.Value> <ControlTemplate> <Grid> <image name="Part_track"Source=".. /images/flat Progress bar.png"Horizontalalignment=" Left"Stretch="Fill"/> <image name="PART_Indicator"Source=".. /images/flat Progress bar_1.png"Horizontalalignment=" Left"Stretch="Fill"/> </Grid> </ControlTemplate> </Setter.Value> < ;/setter> </Style>
Flat Progress bar.png:
Flat Progress bar_1.png:
WPF ProgressBar Styles