syncfusion-wpf-radial-gauge — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-wpf-radial-gauge (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Comprehensive guide for implementing the Syncfusion® WPF Radial Gauge (SfCircularGauge) component to visualize numeric values on circular scales. This skill helps you create highly customizable gauges including speedometers, temperature indicators, KPI dashboards, and progress meters with needles, ranges, and interactive features.
Use this skill when you need to:
This skill is essential for creating any circular/radial visualization where you need to display numeric values on a circular scale with customizable pointers, ranges, and visual indicators.
The SfCircularGauge is a powerful data visualization component that displays numeric values on a circular scale. It's highly customizable and supports multiple visual elements:
This skill provides comprehensive coverage of all circular gauge features organized by functionality.
📄 Read: references/getting-started.md
When to read: Setting up your first circular gauge, installing packages, understanding basic structure.
Topics covered:
📄 Read: references/scales-and-configuration.md
When to read: Configuring the circular scale's values, angles, intervals, and appearance.
Topics covered:
📄 Read: references/pointers.md
When to read: Adding needles, range pointers, or symbol markers to indicate values.
Topics covered:
📄 Read: references/ranges.md
When to read: Adding colored zones to indicate different value ranges (low/medium/high).
Topics covered:
📄 Read: references/labels-and-ticks.md
When to read: Customizing scale labels, major ticks, and minor ticks.
Topics covered:
📄 Read: references/rim-and-appearance.md
When to read: Styling the gauge rim, background, size, and applying themes.
Topics covered:
📄 Read: references/header.md
When to read: Adding titles or labels to your gauge.
Topics covered:
📄 Read: references/annotations.md
When to read: Overlaying custom views, text, images, or nested gauges on the circular gauge.
Topics covered:
📄 Read: references/advanced-features.md
When to read: Implementing animations, pointer dragging, events, and MVVM patterns.
Topics covered:
Here's a complete example to create a speedometer gauge with needle pointer, range zones, and header:
<Window xmlns:gauge="clr-namespace:Syncfusion.UI.Xaml.Gauges;assembly=Syncfusion.SfGauge.Wpf">
<gauge:SfCircularGauge Height="300" Width="300"
HeaderAlignment="Custom"
GaugeHeaderPosition="0.63,0.75">
<!-- Header -->
<gauge:SfCircularGauge.GaugeHeader>
<TextBlock Text="Speedometer"
FontSize="16"
FontWeight="SemiBold"
Foreground="Black"/>
</gauge:SfCircularGauge.GaugeHeader>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale StartValue="0"
EndValue="160"
Interval="20"
StartAngle="130"
SweepAngle="280"
ShowRim="True"
RimStroke="LightGray"
RimStrokeThickness="5">
<!-- Ranges for zones -->
<gauge:CircularScale.Ranges>
<gauge:CircularRange StartValue="0" EndValue="80"
Stroke="Green" StrokeThickness="5"/>
<gauge:CircularRange StartValue="80" EndValue="120"
Stroke="Orange" StrokeThickness="5"/>
<gauge:CircularRange StartValue="120" EndValue="160"
Stroke="Red" StrokeThickness="5"/>
</gauge:CircularScale.Ranges>
<!-- Needle Pointer -->
<gauge:CircularScale.Pointers>
<gauge:CircularPointer PointerType="NeedlePointer"
Value="85"
NeedlePointerType="Triangle"
NeedleLengthFactor="0.6"
NeedlePointerStroke="#333"
NeedlePointerStrokeThickness="5"
KnobFill="#333"
KnobStroke="#333"
PointerCapDiameter="15"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>
</Window>using Syncfusion.UI.Xaml.Gauges;
using System.Windows;
using System.Windows.Media;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// License registration (in App.xaml.cs OnStartup)
// Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR_LICENSE_KEY");
}
}SfCircularGauge gauge = new SfCircularGauge();
gauge.Height = 300;
gauge.Width = 300;
// Header
TextBlock header = new TextBlock
{
Text = "Speedometer",
FontSize = 16,
FontWeight = FontWeights.SemiBold,
Foreground = new SolidColorBrush(Colors.Black)
};
gauge.GaugeHeader = header;
gauge.HeaderAlignment = HeaderAlignment.Custom;
gauge.GaugeHeaderPosition = new Point(0.63, 0.75);
// Scale
CircularScale scale = new CircularScale
{
StartValue = 0,
EndValue = 160,
Interval = 20,
StartAngle = 130,
SweepAngle = 280,
ShowRim = true,
RimStroke = new SolidColorBrush(Colors.LightGray),
RimStrokeThickness = 5
};
// Ranges
scale.Ranges.Add(new CircularRange
{
StartValue = 0, EndValue = 80,
Stroke = new SolidColorBrush(Colors.Green),
StrokeThickness = 5
});
scale.Ranges.Add(new CircularRange
{
StartValue = 80, EndValue = 120,
Stroke = new SolidColorBrush(Colors.Orange),
StrokeThickness = 5
});
scale.Ranges.Add(new CircularRange
{
StartValue = 120, EndValue = 160,
Stroke = new SolidColorBrush(Colors.Red),
StrokeThickness = 5
});
// Needle Pointer
CircularPointer pointer = new CircularPointer
{
PointerType = PointerType.NeedlePointer,
Value = 85,
NeedlePointerType = NeedlePointerType.Triangle,
NeedleLengthFactor = 0.6,
NeedlePointerStroke = new SolidColorBrush(Color.FromRgb(51, 51, 51)),
NeedlePointerStrokeThickness = 5,
KnobFill = new SolidColorBrush(Color.FromRgb(51, 51, 51)),
KnobStroke = new SolidColorBrush(Color.FromRgb(51, 51, 51)),
PointerCapDiameter = 15
};
scale.Pointers.Add(pointer);
gauge.Scales.Add(scale);
this.Content = gauge;Use range pointers for progress/completion visualization:
<gauge:SfCircularGauge>
<gauge:SfCircularGauge.Scales>
<gauge:CircularScale StartValue="0" EndValue="100"
SweepAngle="360"
RimStroke="LightGray"
RimStrokeThickness="20">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer PointerType="RangePointer"
Value="75"
RangePointerStroke="DeepSkyBlue"
RangePointerStrokeThickness="20"
RangeCap="Both"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>Create temperature displays with multiple ranges:
<gauge:CircularScale StartValue="-30" EndValue="50">
<gauge:CircularScale.Ranges>
<gauge:CircularRange StartValue="-30" EndValue="0"
Stroke="Blue" StrokeThickness="10"/>
<gauge:CircularRange StartValue="0" EndValue="25"
Stroke="Green" StrokeThickness="10"/>
<gauge:CircularRange StartValue="25" EndValue="50"
Stroke="Red" StrokeThickness="10"/>
</gauge:CircularScale.Ranges>
<gauge:CircularScale.Pointers>
<gauge:CircularPointer PointerType="NeedlePointer" Value="22"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>Enable user interaction with pointer dragging:
<gauge:CircularPointer PointerType="SymbolPointer"
Symbol="InvertedTriangle"
EnableDragging="True"
EnableAnimation="False"
Value="50"
ValueChanged="Pointer_ValueChanged"/>private void Pointer_ValueChanged(object sender, ValueChangedEventArgs e)
{
// Update UI or data model with new value
CurrentValue = e.Value;
}Display multiple metrics in one gauge:
<gauge:SfCircularGauge SpacingMargin="0.7">
<gauge:SfCircularGauge.Scales>
<!-- Outer Scale -->
<gauge:CircularScale Radius="180">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer Value="60"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
<!-- Inner Scale -->
<gauge:CircularScale Radius="100">
<gauge:CircularScale.Pointers>
<gauge:CircularPointer Value="80"/>
</gauge:CircularScale.Pointers>
</gauge:CircularScale>
</gauge:SfCircularGauge.Scales>
</gauge:SfCircularGauge>Bind pointer values to ViewModel properties:
<gauge:CircularPointer Value="{Binding CurrentSpeed, Mode=TwoWay}"/>public class GaugeViewModel : INotifyPropertyChanged
{
private double _currentSpeed;
public double CurrentSpeed
{
get => _currentSpeed;
set
{
_currentSpeed = value;
OnPropertyChanged(nameof(CurrentSpeed));
}
}
// INotifyPropertyChanged implementation
}| Property | Type | Description |
|---|---|---|
Scales | ObservableCollection<CircularScale> | Collection of scales in the gauge |
GaugeHeader | object | Header content for the gauge |
HeaderAlignment | HeaderAlignment | Header position (Top, Bottom, Custom) |
GaugeHeaderPosition | Point | Custom header position (0-1, 0-1) |
Annotations | CircularGaugeAnnotationCollection | Custom annotations overlay |
SpacingMargin | double | Spacing between multiple scales (0.1-1) |
| Property | Type | Description |
|---|---|---|
StartValue | double | Minimum value of the scale |
EndValue | double | Maximum value of the scale |
Interval | double | Interval between labels |
StartAngle | double | Starting angle (0-360) |
SweepAngle | double | Sweep angle (0-360) |
SweepDirection | SweepDirection | Clockwise or Counterclockwise |
Radius | double | Scale radius |
RadiusFactor | double | Radius factor (0-1) |
ShowRim | bool | Show/hide rim |
RimStroke | Brush | Rim color |
RimStrokeThickness | double | Rim thickness |
Pointers | ObservableCollection<CircularPointer> | Pointers collection |
Ranges | ObservableCollection<CircularRange> | Ranges collection |
| Property | Type | Description |
|---|---|---|
PointerType | PointerType | NeedlePointer, RangePointer, SymbolPointer |
Value | double | Current pointer value |
EnableAnimation | bool | Enable smooth animation |
AnimationDuration | int | Animation duration (ms) |
EnableDragging | bool | Enable interactive dragging |
NeedlePointerType | NeedlePointerType | Rectangle, Triangle, Tapered, Arrow |
NeedleLengthFactor | double | Needle length (0-1) |
Symbol | Symbol | Symbol type for SymbolPointer |
RangeCap | RangeCap | Range cap style (Start, End, Both, None) |
| Property | Type | Description |
|---|---|---|
StartValue | double | Range start value |
EndValue | double | Range end value |
Stroke | Brush | Range color |
StrokeThickness | double | Range thickness |
Offset | double | Position offset (0-1) |
Create KPI dashboards with multiple gauges showing metrics like sales, performance, customer satisfaction with color-coded zones for targets.
Build control panels with gauges for pressure, temperature, RPM, voltage with real-time updates and alarm zones.
Implement speedometers, tachometers, fuel gauges, temperature indicators with realistic needle movements and warning zones.
Display heart rate monitors, step counters, calorie trackers with progress visualization and target zones.
Create CPU usage, memory utilization, disk space, network bandwidth indicators with real-time updates.
Next Steps: Explore the reference files above based on your specific needs. Start with Getting Started for setup, then dive into specific features as required.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.