Implement Syncfusion WinUI Radial Gauge (SfRadialGauge) component for circular data visualization in desktop applications. Use this when working with radial gauges, speedometers, temperature monitors, or dashboard meters. This skill covers axis configuration, multiple pointer types (needle, shape, content, range), ranges with gradients, annotations, animations, and interactive dragging for WinUI/.NET desktop applications.
The Syncfusion WinUI Radial Gauge (SfRadialGauge) is a multi-purpose data visualization control that displays numerical values on a circular scale. It's ideal for creating speedometers, temperature monitors, dashboard gauges, meter gauges, multi-axis clocks, watches, activity gauges, compasses, and other circular indicators.
Use this skill when you need to:
Key Features:
π Read: references/getting-started.md
Use when you need to:
π Read: references/axis-configuration.md
Use when you need to:
π Read: references/pointers.md
Use when you need to:
π Read: references/ranges.md
Use when you need to:
π Read: references/annotations.md
Use when you need to:
π Read: references/animation.md
Use when you need to:
π Read: references/api-reference.md
Use when you need to:
Here's a basic speedometer gauge with ranges and needle pointer:
<Window x:Class="RadialGaugeApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:gauge="using:Syncfusion.UI.Xaml.Gauges">
<gauge:SfRadialGauge>
<gauge:SfRadialGauge.Axes>
<gauge:RadialAxis Maximum="150"
Interval="10">
<!-- Color-coded ranges -->
<gauge:RadialAxis.Ranges>
<gauge:GaugeRange StartValue="0"
EndValue="50"
Background="Green" />
<gauge:GaugeRange StartValue="50"
EndValue="100"
Background="Orange" />
<gauge:GaugeRange StartValue="100"
EndValue="150"
Background="Red" />
</gauge:RadialAxis.Ranges>
<!-- Needle pointer -->
<gauge:RadialAxis.Pointers>
<gauge:NeedlePointer Value="90"
EnableAnimation="True" />
</gauge:RadialAxis.Pointers>
<!-- Value annotation -->
<gauge:RadialAxis.Annotations>
<gauge:GaugeAnnotation DirectionUnit="Angle"
DirectionValue="90"
PositionFactor="0.5">
<gauge:GaugeAnnotation.Content>
<TextBlock Text="90"
FontSize="25"
FontWeight="Bold" />
</gauge:GaugeAnnotation.Content>
</gauge:GaugeAnnotation>
</gauge:RadialAxis.Annotations>
</gauge:RadialAxis>
</gauge:SfRadialGauge.Axes>
</gauge:SfRadialGauge>
</Window>
using Syncfusion.UI.Xaml.Gauges;
using Microsoft.UI.Xaml;
namespace RadialGaugeApp
{
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
// Can also create gauge programmatically
SfRadialGauge gauge = new SfRadialGauge();
RadialAxis axis = new RadialAxis();
axis.Maximum = 150;
axis.Interval = 10;
// Add ranges
axis.Ranges.Add(new GaugeRange {
StartValue = 0,
EndValue = 50,
Background = new SolidColorBrush(Colors.Green)
});
// Add pointer
axis.Pointers.Add(new NeedlePointer {
Value = 90,
EnableAnimation = true
});
gauge.Axes.Add(axis);
}
}
}
<gauge:SfRadialGauge>
<gauge:SfRadialGauge.Axes>
<gauge:RadialAxis Minimum="-60"
Maximum="60"
Interval="20"
StartAngle="180"
EndAngle="0">
<gauge:RadialAxis.Ranges>
<gauge:GaugeRange StartValue="-60"
EndValue="0"
Background="#2196F3" />
<gauge:GaugeRange StartValue="0"
EndValue="30"
Background="#4CAF50" />
<gauge:GaugeRange StartValue="30"
EndValue="60"
Background="#FF5722" />
</gauge:RadialAxis.Ranges>
<gauge:RadialAxis.Pointers>
<gauge:RangePointer Value="25"
PointerWidth="15"
EnableAnimation="True" />
</gauge:RadialAxis.Pointers>
<gauge:RadialAxis.Annotations>
<gauge:GaugeAnnotation>
<gauge:GaugeAnnotation.Content>
<TextBlock Text="25Β°C"
FontSize="30"
FontWeight="Bold" />
</gauge:GaugeAnnotation.Content>
</gauge:GaugeAnnotation>
</gauge:RadialAxis.Annotations>
</gauge:RadialAxis>
</gauge:SfRadialGauge.Axes>
</gauge:SfRadialGauge>
<gauge:SfRadialGauge>
<gauge:SfRadialGauge.Axes>
<gauge:RadialAxis ShowTicks="False"
AxisLineFill="CornflowerBlue"
AxisLineWidth="30">
<gauge:RadialAxis.Pointers>
<gauge:ShapePointer Value="60"
IsInteractive="True"
MarkerOffset="-30"
Background="Indigo"
ValueChanged="Pointer_ValueChanged" />
</gauge:RadialAxis.Pointers>
</gauge:RadialAxis>
</gauge:SfRadialGauge.Axes>
</gauge:SfRadialGauge>
private void Pointer_ValueChanged(object sender, ValueChangedEventArgs e)
{
// Handle pointer value changes
Debug.WriteLine($"New value: {e.Value}");
}
<gauge:SfRadialGauge>
<gauge:SfRadialGauge.Axes>
<!-- Hours axis -->
<gauge:RadialAxis Maximum="12"
Interval="1"
RadiusFactor="0.8"
LabelPosition="Outside">
<gauge:RadialAxis.Pointers>
<gauge:NeedlePointer Value="10"
NeedleLength="0.5"
NeedleEndWidth="8" />
</gauge:RadialAxis.Pointers>
</gauge:RadialAxis>
<!-- Minutes axis -->
<gauge:RadialAxis Maximum="60"
Interval="5"
RadiusFactor="0.95"
LabelPosition="Outside">
<gauge:RadialAxis.Pointers>
<gauge:NeedlePointer Value="35"
NeedleLength="0.7"
NeedleEndWidth="4" />
</gauge:RadialAxis.Pointers>
</gauge:RadialAxis>
</gauge:SfRadialGauge.Axes>
</gauge:SfRadialGauge>
<gauge:SfRadialGauge>
<gauge:SfRadialGauge.Axes>
<gauge:RadialAxis ShowLabels="False"
ShowTicks="False"
StartAngle="270"
EndAngle="270"
Maximum="100"
AxisLineWidth="20"
AxisLineFill="LightGray">
<gauge:RadialAxis.Pointers>
<gauge:RangePointer Value="73"
PointerWidth="20"
Background="#4CAF50"
CornerStyle="BothCurve"
EnableAnimation="True" />
</gauge:RadialAxis.Pointers>
<gauge:RadialAxis.Annotations>
<gauge:GaugeAnnotation>
<gauge:GaugeAnnotation.Content>
<TextBlock>
<Run Text="73" FontSize="40" FontWeight="Bold" />
<Run Text="%" FontSize="20" />
</TextBlock>
</gauge:GaugeAnnotation.Content>
</gauge:GaugeAnnotation>
</gauge:RadialAxis.Annotations>
</gauge:RadialAxis>
</gauge:SfRadialGauge.Axes>
</gauge:SfRadialGauge>
Axes - Collection of RadialAxis objectsCanScaleToFit - Position axis based on start/end anglesMinimum / Maximum - Axis value rangeInterval - Space between labelsStartAngle / EndAngle - Circular arc angles (0-360Β°)RadiusFactor - Axis size (0-1 factor of available space)IsInversed - Counter-clockwise directionAxisLineWidth / AxisLineWidthUnit - Line thickness (Pixel/Factor)AxisLineFill - Line color/brushGradientStops - Gradient colors on axis lineShowAxisLine - Axis line visibilityShowLabels / ShowTicks - Element visibilityLabelFormat - Number format (currency, percent, etc.)LabelTemplate - Custom label templateLabelPosition / TickPosition - Inside/Outside/CrossLabelOffset / TickOffset - Distance from axisMajorTickLength / MinorTickLength - Tick sizesMinorTicksPerInterval - Minor tick countValue - Current pointer valueEnableAnimation - Animate on value changeAnimationDuration - Animation time (ms)AnimationEasingFunction - Easing functionIsInteractive - Enable draggingNeedleLength / NeedleStartWidth / NeedleEndWidth - Needle shapeKnobRadius / KnobFill / KnobStroke - Center knobTailLength / TailWidth - Needle tailShapeType - Circle, Diamond, Triangle, etc.ShapeHeight / ShapeWidth - Shape sizeMarkerOffset - Distance from axisPointerWidth - Arc widthCornerStyle - BothFlat, BothCurve, StartCurve, EndCurveStartValue / EndValue - Range boundariesStartWidth / EndWidth - Range thicknessWidthUnit - Pixel or FactorRangeOffset - Distance from axisBackground - Range colorGradientStops - Gradient colorsLabel / LabelTemplate - Range labelDirectionUnit - Angle or AxisValueDirectionValue - Position valuePositionFactor - Distance from center (0-1)Content - Any UIElementInstallation: Install the Syncfusion.Gauge.WinUI NuGet package
Namespace: Syncfusion.UI.Xaml.Gauges
GitHub Samples: WinUI Radial Gauge Demos