Implementing Syncfusion WPF SmithCharts
When to Use This Skill
Use this skill immediately when the user needs to:
- Implement a Syncfusion WPF SmithChart (SfSmithChart) component
- Visualize impedance or admittance data for transmission lines
- Create charts for high-frequency circuit applications
- Plot data with resistance (horizontal) and reactance (radial) axes
- Add line series with data markers and labels
- Configure dual-axis systems (resistance and reactance)
- Customize chart appearance, palettes, and themes
- Implement interactive features like tooltips
- Switch between Impedance and Admittance rendering types
- Work with legends for multiple series visualization
- Handle transmission line data visualization
Component Overview
SfSmithChart is a specialized data visualization component for high-frequency circuit applications. It plots transmission line parameters using two sets of circles representing normalized resistance and reactance values.
Key Capabilities:
- Dual-Axis System: Horizontal (Resistance) and Radial (Reactance) axes
- Line Series Visualization: Plot data with customizable line series
- Data Markers: Multiple marker shapes with custom templates
- Data Labels: Automatic label positioning with collision detection
- Interactive Legend: Toggle series visibility, multiple positioning options
- Two Rendering Modes: Impedance (default) and Admittance
- Rich Customization: Palettes, colors, gridlines, axis styling
- Tooltips: Interactive tooltips with custom templates
- Animation Support: Smooth series animations
Documentation and Navigation Guide
Getting Started and Installation
📄 Read: references/getting-started.md
Read this when the user needs to:
- Install and set up the SmithChart component
- Create a SmithChart from XAML or code-behind
- Add assembly references (Syncfusion.SfSmithChart.WPF)
- Initialize the chart with basic configuration
- Create data models for transmission line data
- Add header, axes, series, and legend
- Apply themes (SfSkinManager)
- See complete working examples
Series Configuration
📄 Read: references/series-configuration.md
Read this when the user needs to:
- Configure LineSeries for data visualization
- Set up data binding (ItemsSource, ResistancePath, ReactancePath)
- Customize series appearance (Interior, StrokeThickness)
- Enable series animation (EnableAnimation, AnimationDuration)
- Control series visibility programmatically
- Handle multiple series in one chart
- Customize data plotting order (ArrangeByIndex)
- Apply series-specific palettes
Axes Configuration
📄 Read: references/axes-configuration.md
Read this when the user needs to:
- Configure Horizontal Axis (Resistance) properties
- Configure Radial Axis (Reactance) properties
- Customize major and minor gridlines
- Control gridline visibility and count
- Style axis lines and gridlines
- Position axis labels (Inside/Outside)
- Handle label intersection and overlap
- Respond to axis label events (LabelCreated)
Data Markers and Labels
📄 Read: references/data-markers-and-labels.md
Read this when the user needs to:
- Add markers to data points (ShowMarker, MarkerType)
- Use built-in marker shapes (Circle, Rectangle, Diamond, etc.)
- Customize marker size, color, and stroke
- Create custom marker templates
- Enable data labels (ShowLabel)
- Handle automatic label positioning and collision
- Style data labels (LabelStyle)
- Create custom label templates (LabelTemplate)
Legend and Appearance
📄 Read: references/legend-and-appearance.md
Read this when the user needs to:
- Add and configure chart legend
- Position legend (Docked or Floating)
- Customize legend icons and appearance
- Toggle series visibility from legend
- Apply color palettes (Metro, BlueChrome, etc.)
- Customize chart area (Background, BorderBrush)
- Set series-specific palettes
- Control circle radius
- Get chart properties (AreaBounds, CenterPoint, Radius)
- Style legend items (FontSize, colors, spacing)
Rendering Types and User Interactions
📄 Read: references/rendering-and-interactions.md
Read this when the user needs to:
- Understand Impedance vs Admittance rendering
- Switch rendering types (RenderingType property)
- Enable tooltips for data points (ShowToolTip)
- Configure tooltip duration
- Create custom tooltip templates
- Implement interactive features
Quick Start Example
Here's a minimal example to create a functional SmithChart with transmission line data:
XAML Approach
xml
<Window xmlns:syncfusion="clr-namespace:Syncfusion.UI.Xaml.SmithChart;assembly=Syncfusion.SfSmithChart.WPF">
<Grid>
<syncfusion:SfSmithChart Header="Impedance Transmission" Height="400" Width="500">
<!-- LineSeries with data binding -->
<syncfusion:LineSeries ResistancePath="Resistance"
ReactancePath="Reactance"
ItemsSource="{Binding Data}"
Label="TransmissionLine"
ShowMarker="True">
</syncfusion:LineSeries>
<!-- Horizontal (Resistance) Axis -->
<syncfusion:SfSmithChart.HorizontalAxis>
<syncfusion:HorizontalAxis FontSize="11"/>
</syncfusion:SfSmithChart.HorizontalAxis>
<!-- Radial (Reactance) Axis -->
<syncfusion:SfSmithChart.RadialAxis>
<syncfusion:RadialAxis FontSize="11"/>
</syncfusion:SfSmithChart.RadialAxis>
<!-- Legend -->
<syncfusion:SfSmithChart.Legend>
<syncfusion:SmithChartLegend/>
</syncfusion:SfSmithChart.Legend>
</syncfusion:SfSmithChart>
</Grid>
</Window>
Code-Behind Approach
csharp
using Syncfusion.UI.Xaml.SmithChart;
// Create SmithChart
SfSmithChart chart = new SfSmithChart();
chart.Header = "Impedance Transmission";
// Configure axes
chart.HorizontalAxis = new HorizontalAxis { FontSize = 11 };
chart.RadialAxis = new RadialAxis { FontSize = 11 };
// Add series
LineSeries series = new LineSeries
{
ItemsSource = Data,
ResistancePath = "Resistance",
ReactancePath = "Reactance",
Label = "TransmissionLine",
ShowMarker = true
};
chart.Series.Add(series);
// Add legend
chart.Legend = new SmithChartLegend();
// Add to layout
this.Content = chart;
Data Model
csharp
public class TransmissionData
{
public double Resistance { get; set; }
public double Reactance { get; set; }
}
// Sample data
ObservableCollection<TransmissionData> Data = new ObservableCollection<TransmissionData>
{
new TransmissionData { Resistance = 0, Reactance = 0.05 },
new TransmissionData { Resistance = 0.3, Reactance = 0.1 },
new TransmissionData { Resistance = 1.0, Reactance = 0.4 },
new TransmissionData { Resistance = 2.0, Reactance = 0.5 }
};
Common Patterns
Pattern 1: Multiple Series Comparison
csharp
// Add multiple series for comparison
LineSeries series1 = new LineSeries
{
ItemsSource = Data1,
ResistancePath = "Resistance",
ReactancePath = "Reactance",
Label = "Transmission-1",
ShowMarker = true
};
LineSeries series2 = new LineSeries
{
ItemsSource = Data2,
ResistancePath = "Resistance",
ReactancePath = "Reactance",
Label = "Transmission-2",
ShowMarker = true,
Interior = new SolidColorBrush(Colors.Orange)
};
chart.Series.Add(series1);
chart.Series.Add(series2);
Pattern 2: Enhanced Visual Feedback
csharp
// Series with markers, labels, and tooltip
LineSeries series = new LineSeries
{
ShowMarker = true,
MarkerType = MarkerType.Circle,
MarkerHeight = 10,
MarkerWidth = 10,
ShowToolTip = true,
ToolTipDuration = TimeSpan.FromSeconds(3),
StrokeThickness = 2,
EnableAnimation = true,
AnimationDuration = TimeSpan.FromSeconds(1)
};
series.DataLabel.ShowLabel = true;
Pattern 3: Custom Appearance
csharp
// Apply custom palette and styling
chart.ColorModel = new SmithChartColorModel
{
Palette = ColorPalette.BlueChrome
};
chart.Background = new SolidColorBrush(Colors.WhiteSmoke);
chart.ChartAreaBackground = new SolidColorBrush(Colors.White);
chart.ChartAreaBorderBrush = new SolidColorBrush(Colors.Gray);
chart.ChartAreaBorderThickness = new Thickness(1);
chart.Radius = 0.9; // 90% of plot area
Pattern 4: Admittance Rendering
csharp
// Switch to Admittance mode for different visualization
chart.RenderingType = RenderingType.Admittance;
// Data is now rendered from left to right
Key Properties
SfSmithChart Core Properties
| Property | Type | Description |
|---|
| object | Chart title/header text |
| HorizontalAxis | Resistance axis configuration |
| RadialAxis | Reactance axis configuration |
| ObservableCollection | Collection of chart series |
| SmithChartLegend | Legend configuration |
| RenderingType | Impedance or Admittance mode |
| double | Chart circle radius (0.1 to 1) |
| SmithChartColorModel | Palette and color settings |
| Brush | Chart plotting area background |
LineSeries Key Properties
| Property | Type | Description |
|---|
| IEnumerable | Data source for the series |
| string | Property path for resistance values |
| string | Property path for reactance values |
| string | Series name (shows in legend) |
| Brush | Line color |
| double | Line thickness |
| bool | Display markers at data points |
| MarkerType | Marker shape (Circle, Rectangle, etc.) |
| bool | Enable tooltips on hover |
| bool | Animate series on load |
| bool | Show/hide series |
Axis Common Properties
| Property | Type | Description |
|---|
| bool | Display major gridlines |
| bool | Display minor gridlines |
| int | Number of minor gridlines (default: 8) |
| Style | Style for major gridlines |
| Style | Style for minor gridlines |
| bool | Display axis line |
| Style | Style for axis line |
| LabelPlacement | Inside or Outside positioning |
| LabelIntersectActions | Handle overlapping labels (Hide/None) |
Common Use Cases
Use Case 1: Basic Transmission Line Visualization
Goal: Display impedance data for a transmission line
Approach:
- Create data model with Resistance and Reactance properties
- Set up basic SmithChart with header
- Add LineSeries with data binding
- Configure both axes
- Add legend for reference
Reference: See getting-started.md
Use Case 2: Comparing Multiple Transmission Lines
Goal: Compare impedance characteristics of different transmission lines
Approach:
- Add multiple LineSeries with different ItemsSource
- Assign unique Label to each series
- Use different Interior colors for distinction
- Enable legend for series identification
- Consider using markers for clarity
Reference: See series-configuration.md and legend-and-appearance.md
Use Case 3: Detailed Data Point Analysis
Goal: Provide detailed information about each data point
Approach:
- Enable ShowMarker for visual data points
- Enable data labels (DataLabel.ShowLabel)
- Configure tooltips (ShowToolTip)
- Customize marker and label appearance
- Consider custom templates for specialized information
Reference: See data-markers-and-labels.md and rendering-and-interactions.md
Use Case 4: Admittance Analysis
Goal: Visualize admittance instead of impedance
Approach:
- Set RenderingType to Admittance
- Data automatically renders left to right
- Axis labels adjust automatically
- All other features remain available
Reference: See rendering-and-interactions.md
Use Case 5: Professional Report Visualization
Goal: Create publication-ready SmithChart with custom branding
Approach:
- Apply custom ColorModel palette
- Customize chart area and background colors
- Style axes with custom gridline styles
- Configure legend with custom icons
- Adjust Radius for optimal sizing
- Apply themes using SfSkinManager
Reference: See legend-and-appearance.md and getting-started.md
Edge Cases and Troubleshooting
Assembly Reference Issues
- Ensure Syncfusion.SfSmithChart.WPF assembly is properly referenced
- Check .NET Framework version compatibility
- Verify xmlns namespace declaration in XAML
Data Not Displaying
- Verify ItemsSource is properly bound
- Check ResistancePath and ReactancePath match property names exactly
- Ensure DataContext is set for data binding
- Verify data collection is not empty
Overlapping Labels
- Use LabelIntersectAction property to control overlap behavior
- Labels automatically reposition when ShowLabel is true
- Consider reducing data points or adjusting label templates
Performance with Large Datasets
- Use ArrangeByIndex = false for sorted data (default behavior)
- Enable animation selectively for better initial load
- Consider data sampling for extremely large datasets
Summary
The Syncfusion WPF SmithChart is a specialized component for high-frequency circuit applications, particularly for visualizing transmission line impedance and admittance data. It features a dual-axis system, rich customization options, and interactive features suitable for engineering and scientific applications. Always start with the getting-started reference for initial setup, then explore specific features as needed for your use case.