Labels in WPF Radial Gauge (SfCircularGauge)
7 May 202122 minutes to read
The Scale
labels associate numeric values with major scale tick marks.
Label stroke customization
The label color can be changed using the LabelStroke
property.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale LabelStroke="DeepPink">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.LabelStroke = new SolidColorBrush(Colors.DeepPink);
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Label font customization
The label font can be customized using the FontSize
, FontFamily
, and FontStyle
properties.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale FontFamily="Monotype Corsiva" FontSize="20"
FontStyle="Italic" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
sfCircularGauge.FontSize = 20;
sfCircularGauge.FontFamily = new FontFamily("Monotype Corsiva");
sfCircularGauge.FontStyle = FontStyles.Italic;
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Setting a position for labels
The Labels
can be placed inside the scale, outside the scale, or custom position using the following two ways:
Inside or Outside label Position
Placing the labels inside or outside the scale by selecting the LabelPosition
property is Inside
or Outside
. Please find the values available in LabelPosition
property below.
-
Inside (Default)
-
Outside
-
Custom
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale LabelPosition="Outside" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.LabelPosition = LabelPosition.Outside;
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Setting custom position for labels
Positioning the labels far away from the ticks using the LabelOffset
property. First, set the LabelPosition
to custom, and then position the label using the LabelOffset
property.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale LabelPosition="Custom" LabelOffset="0.5" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.LabelPosition = LabelPosition.Custom;
mainscale.LabelOffset = 0.5;
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Label rotation
Circular gauge labels can be rotated based on its corresponding angle. This can be controlled by CanRotateLabels
property in the scale.
Setting false to this property will display all the labels without rotation.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale FontFamily="Monotype Corsiva" FontSize="20" CanRotateLabels="True"
FontStyle="Italic" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
sfCircularGauge.FontSize = 20;
sfCircularGauge.FontFamily = new FontFamily("Monotype Corsiva");
sfCircularGauge.FontStyle = FontStyles.Italic;
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
mainscale.CanRotateLabels = true;
sfCircularGauge.Scales.Add(mainscale);
Setting a smart labels
The EnableSmartLabels
property is a Boolean property that enables or disables the smart label feature of the circular gauge.
This property allow to change the NumericScaleType
of the labels displayed in a gauge scale, and customize the labels by adding prefixes or suffixes to the scale labels.
The NumericScaleType
property allows to set the type of label. The following types can be applied to labels:
• Auto
• Thousands
• Millions
• Billions
• Trillions
• Quadrillions
• Quintillions
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale StartValue="0" EndValue="500"
EnableSmartLabels="True" NumericScaleType="Thousands">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.StartValue = 0;
mainscale.EndValue = 500;
mainscale.EnableSmartLabels = true;
mainscale.NumericScaleType = NumericScaleType.Thousands;
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Setting a number of fraction digits for labels
The NoOfFractionalDigit
property is used to set the number of fractional digits to be displayed in the scale labels.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale NoOfFractionalDigit="3">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.NoOfFractionalDigit = 3;
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Setting a postfix and prefix for labels
You can postfix or prefix values to the scale labels using the LabelPostfix
and LabelPrefix
properties, respectively.
Setting postfix value for labels
The LabelPostfix
property allows to postfix the values to the scale labels.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale LabelPostfix="k">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.LabelPostfix = "k";
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Setting prefix value for labels
The LabelPrefix
property allows to prefix the values to the scale labels.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale LabelPrefix="$">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.LabelPrefix = "$";
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
Setting scale labels visibility
The ShowLabels
property is a Boolean property, which is used to enable or disable the labels in circular gauge.
NOTE
Default value of the ShowLabels property is true.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales >
<gauge:CircularScale ShowLabels="False" x:Name="scale" RimStroke="LightGray" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.ShowLabels = false;
mainscale.RimStroke = new SolidColorBrush(Colors.LightGray);
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Edge label customization in scale
You can customize the edge label by using the ShowFirstLabel
and ShowLastLabel
properties, which are Boolean properties.
-
ShowFirstLabel
property is used to enable or disable the first label. Default value of the ShowFirstLabel property is true. -
ShowLastLabel
property is used to enable or disable the last label. Default value of the ShowLastLabel property is true.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales >
<gauge:CircularScale ShowFirstLabel = "False" StartValue = "0" EndValue = "12"
Interval ="1" MinorTicksPerInterval = "5" StartAngle = "270"
SweepAngle = "360" x:Name="scale" RimStroke="LightGray" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.StartValue = 0;
mainscale.Interval = 1;
mainscale.MinorTicksPerInterval = 5;
mainscale.EndValue = 12;
mainscale.StartAngle = 270;
mainscale.SweepAngle = 360;
mainscale.ShowFirstLabel = false;
mainscale.RimStroke = new SolidColorBrush(Colors.LightGray);
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
Events
You can change the default label by hooking the LabelCreated
event. Based on requirements, the labels can be changed by using the LabelText
property of LabelCreatedEventArgs
.
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales >
<gauge:CircularScale x:Name="scale" LabelCreated="scale_LabelCreated"
SweepAngle="360" StartAngle="270" StartValue="0" EndValue="16"
Interval="2" RimStroke="LightGray" MinorTicksPerInterval="1"
ShowLastLabel="False" >
<gauge:CircularScale.Pointers>
<gauge:CircularPointer NeedlePointerVisibility="Hidden"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
SfCircularGauge sfCircularGauge = new SfCircularGauge();
CircularScale mainscale = new CircularScale();
mainscale.StartValue = 0;
mainscale.Interval = 2;
mainscale.MinorTicksPerInterval = 1;
mainscale.EndValue = 16;
mainscale.StartAngle = 270;
mainscale.SweepAngle = 360;
mainscale.LabelCreated += scale_LabelCreated;
mainscale.ShowLastLabel = false;
mainscale.RimStroke = new SolidColorBrush(Colors.LightGray);
CircularPointer circularPointer = new CircularPointer();
circularPointer.NeedlePointerVisibility = Visibility.Hidden;
mainscale.Pointers.Add(circularPointer);
sfCircularGauge.Scales.Add(mainscale);
private void scale_LabelCreated(object sender, LabelCreatedEventArgs e)
{
switch ((string)e.LabelText)
{
case "0":
e.LabelText = "N";
break;
case "2":
e.LabelText = "NE";
break;
case "4":
e.LabelText = "E";
break;
case "6":
e.LabelText = "SE";
break;
case "8":
e.LabelText = "S";
break;
case "10":
e.LabelText = "SW";
break;
case "12":
e.LabelText = "W";
break;
case "14":
e.LabelText = "NW";
break;
}
}