syncfusion-wpf-heatmap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-wpf-heatmap (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.
Use this skill when you need an actionable, copy-pasteable guide to integrate and configure the Syncfusion SfHeatMap control in a WPF app. This is focused on implementation (what to configure and why), not exhaustive API reference.
Read: references/overview.md
Key points:
TableMapping and CellMapping data modelsRead: references/getting-started.md
What to do first:
SfHeatMap to XAMLItemsSource and an ItemsMapping (TableMapping or CellMapping)ColorMappingCollection for value→color mappingSfHeatMapLegend to make ranges clearRead: references/color-mapping.md
When to tune color mapping:
Copy-pasteable XAML + C# that maps explicit numeric ranges to semantic colors and shows a legend:
<Window xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="HeatMapSamples.MainWindow">
<Window.Resources>
<!-- Define semantic buckets: low=red, mid=yellow, high=green -->
<syncfusion:ColorMappingCollection x:Key="semanticColorMapping">
<!-- Value = numeric stop; Legend uses the Label text -->
<syncfusion:ColorMapping Value="0" Color="#FF0000" Label="Low (0 - 33)" />
<syncfusion:ColorMapping Value="33" Color="#FFFF00" Label="Medium (34 - 66)" />
<syncfusion:ColorMapping Value="66" Color="#00B300" Label="High (67 - 100)" />
</syncfusion:ColorMappingCollection>
<!-- CellMapping for row/column/value triplets -->
<syncfusion:CellMapping x:Key="cellMapping">
<syncfusion:CellMapping.Column>
<syncfusion:ColumnMapping PropertyName="Column" DisplayName="Column" />
</syncfusion:CellMapping.Column>
<syncfusion:CellMapping.Row>
<syncfusion:ColumnMapping PropertyName="Row" DisplayName="Row" />
</syncfusion:CellMapping.Row>
<syncfusion:CellMapping.Value>
<syncfusion:ColumnMapping PropertyName="Value" />
</syncfusion:CellMapping.Value>
</syncfusion:CellMapping>
</Window.Resources>
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Legend explains the semantic buckets clearly -->
<syncfusion:SfHeatMapLegend
Grid.Row="0"
LegendMode="List"
Orientation="Horizontal"
ColorMappingCollection="{StaticResource semanticColorMapping}" />
<!-- The HeatMap uses the same ColorMappingCollection -->
<syncfusion:SfHeatMap
Grid.Row="1"
ItemsSource="{Binding Cells}"
ItemsMapping="{StaticResource cellMapping}"
ColorMappingCollection="{StaticResource semanticColorMapping}" />
</Grid>
</Window>// Minimal code-behind (MainWindow.xaml.cs)
using System.Collections.ObjectModel;
using System.Windows;
public class CellData
{
public string Row { get; set; }
public string Column { get; set; }
public double Value { get; set; }
}
public partial class MainWindow : Window
{
public ObservableCollection<CellData> Cells { get; } = new ObservableCollection<CellData>();
public MainWindow()
{
InitializeComponent();
// sample values spanning 0..100
Cells.Add(new CellData { Row = "R1", Column = "C1", Value = 10 });
Cells.Add(new CellData { Row = "R1", Column = "C2", Value = 40 });
Cells.Add(new CellData { Row = "R1", Column = "C3", Value = 80 });
Cells.Add(new CellData { Row = "R2", Column = "C1", Value = 25 });
Cells.Add(new CellData { Row = "R2", Column = "C2", Value = 55 });
Cells.Add(new CellData { Row = "R2", Column = "C3", Value = 95 });
DataContext = this;
}
}Notes:
ColorMappingCollection defines stops; values between stops are interpolated unless you purposely treat them as buckets. Using the shown stops with SfHeatMapLegend LegendMode="List" produces labeled ranges in the legend.Value thresholds to match your data distribution (e.g., 0/33/66 above). Ensure the Value range you define covers your data domain.Read: references/items-mapping.md
When to use TableMapping vs CellMapping:
TableMapping for wide objects with multiple numeric properties (years as columns)CellMapping for row/column/value triplet datasetsRead: references/legend.md
Use a legend to make color ranges discoverable. Choose Gradient for continuous ranges and List for labeled buckets.
Orientation to adaptColorMappingCollection values and ensure numeric ranges align with dataItemsMapping matches the ItemsSource schema and keysGenerated by automation to provide a concise implementation router for the SfHeatMap control.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.