syncfusion-wpf-kanban-board — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited syncfusion-wpf-kanban-board (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.
This skill provides comprehensive guidance for implementing the Syncfusion® WPF Kanban (SfKanban) control, a powerful visual workflow management system that displays tasks as cards organized across columns representing different workflow stages.
Use this skill immediately when:
The Syncfusion WPF Kanban (SfKanban) provides an efficient way to visualize workflows at each stage of completion. It offers:
Core Features:
📄 Read: references/getting-started.md
Use when user needs:
📄 Read: references/cards.md
Use when user needs:
📄 Read: references/columns.md
Use when user needs:
📄 Read: references/swimlanes.md
Use when user needs:
📄 Read: references/workflows.md
Use when user needs:
📄 Read: references/sorting.md
Use when user needs:
📄 Read: references/events.md
Use when user needs:
<Window xmlns:kanban="clr-namespace:Syncfusion.UI.Xaml.Kanban;assembly=Syncfusion.SfKanban.WPF">
<kanban:SfKanban x:Name="kanban"
ItemsSource="{Binding TaskDetails}">
<kanban:SfKanban.DataContext>
<local:ViewModel/>
</kanban:SfKanban.DataContext>
</kanban:SfKanban>
</Window>using Syncfusion.UI.Xaml.Kanban;
public class ViewModel
{
public ObservableCollection<KanbanModel> TaskDetails { get; set; }
public ViewModel()
{
TaskDetails = new ObservableCollection<KanbanModel>
{
new KanbanModel
{
Title = "UWP Issue",
ID = "651",
Description = "Fix crosshair label template issue",
Category = "Open",
ColorKey = "High",
Tags = new string[] { "Bug Fixing" }
},
new KanbanModel
{
Title = "Kanban Feature",
ID = "25678",
Description = "Implement drag and drop support",
Category = "In Progress",
ColorKey = "Normal",
Tags = new string[] { "New Feature" }
}
};
}
}<kanban:SfKanban AutoGenerateColumns="False"
ItemsSource="{Binding TaskDetails}">
<kanban:KanbanColumn Title="To Do" Categories="Open" />
<kanban:KanbanColumn Title="In Progress" Categories="In Progress" />
<kanban:KanbanColumn Title="Done" Categories="Done" />
</kanban:SfKanban>When: User wants quick setup with columns generated from data
// Columns automatically generated from Category property values
kanban.AutoGenerateColumns = true;
kanban.ItemsSource = viewModel.TaskDetails;Result: Columns created automatically based on unique Category values in data
When: User needs to limit tasks per stage and show visual feedback
<kanban:KanbanColumn Title="In Progress"
Categories="In Progress"
MinimumLimit="2"
MaximumLimit="5" />Result:
When: User needs custom card appearance beyond default
<kanban:SfKanban.CardTemplate>
<DataTemplate>
<Border Background="#F3CFCE"
BorderThickness="1"
CornerRadius="3">
<StackPanel Margin="10">
<TextBlock Text="{Binding Title}"
FontWeight="Bold"
FontSize="14" />
<TextBlock Text="{Binding Description}"
FontSize="12"
TextWrapping="Wrap" />
</StackPanel>
</Border>
</DataTemplate>
</kanban:SfKanban.CardTemplate>DataContext: KanbanModel instance
When: User wants to organize cards by teams or projects
<kanban:SfKanban SwimlaneKey="Assignee"
ItemsSource="{Binding TaskDetails}">
<!-- Cards grouped by Assignee property -->
</kanban:SfKanban>Result: Horizontal swim lane rows, one per unique Assignee value
When: User wants to enforce specific card transition rules
<kanban:SfKanban.Workflows>
<kanban:KanbanWorkflow Category="Open">
<kanban:KanbanWorkflow.AllowedTransitions>
<x:String>In Progress</x:String>
</kanban:KanbanWorkflow.AllowedTransitions>
</kanban:KanbanWorkflow>
<kanban:KanbanWorkflow Category="In Progress">
<kanban:KanbanWorkflow.AllowedTransitions>
<x:String>Done</x:String>
<x:String>Won't Fix</x:String>
</kanban:KanbanWorkflow.AllowedTransitions>
</kanban:KanbanWorkflow>
</kanban:SfKanban.Workflows>Result:
When: User has existing data model, not using KanbanModel
// Custom model
public class TaskDetails
{
public string Title { get; set; }
public string Description { get; set; }
public string Status { get; set; }
}
// XAML
<kanban:SfKanban ItemsSource="{Binding Tasks}"
ColumnMappingPath="Status">
<kanban:SfKanban.CardTemplate>
<!-- Define custom template -->
</kanban:SfKanban.CardTemplate>
</kanban:SfKanban>Important: Must define CardTemplate when using custom model
| Property | Type | Purpose | When to Use |
|---|---|---|---|
ItemsSource | object | Data source for cards | Always (required) |
AutoGenerateColumns | bool | Auto-create columns from Category | Quick setup vs custom control |
Columns | Collection | Manual column definitions | When AutoGenerateColumns = false |
ColumnMappingPath | string | Property for column categorization | Custom models (default: "Category") |
SwimlaneKey | string | Property for swim lane grouping | Organizing by teams/projects |
CardTemplate | DataTemplate | Custom card appearance | Custom data models or styling |
ColumnHeaderTemplate | DataTemplate | Custom column header | Branding or additional info |
SwimlaneHeaderTemplate | DataTemplate | Custom swim lane header | Custom swim lane display |
MinColumnWidth | double | Minimum column width | Responsive layouts |
MaxColumnWidth | double | Maximum column width | Controlling column size |
ColumnWidth | double | Fixed column width | Uniform column sizing |
SortingMappingPath | string | Property for sorting cards | Ordering cards by priority/date |
SortingOrder | enum | Ascending or Descending | Sort direction |
Workflows | Collection | Allowed card transitions | Workflow validation |
IndicatorColorPalette | Collection | Color mapping for indicators | Priority/status colors |
IsToolTipEnabled | bool | Enable card tooltips | Additional card info on hover |
| Property | Type | Purpose | When to Use |
|---|---|---|---|
Title | string | Column display name | Custom column titles |
Categories | string | Comma-separated categories | Mapping data to column |
MinimumLimit | int | WIP minimum limit | Workflow management |
MaximumLimit | int | WIP maximum limit | Preventing overload |
AllowDrag | bool | Enable dragging from column | Controlling card movement |
AllowDrop | bool | Enable dropping to column | Restricting drops |
IsExpanded | bool | Column collapsed/expanded state | UI state control |
| Property | Type | Description | Display Location |
|---|---|---|---|
Title | string | Card heading | Top, bold text |
ID | object | Unique identifier | Not displayed in default UI |
Description | string | Detailed text | Below title |
Category | object | Column assignment | Determines column placement |
Assignee | string | Assigned person | Used for swim lane grouping |
ColorKey | object | Priority/status key | Color bar on card |
Tags | string[] | Labels/categories | Bottom of card |
ImageURL | Uri | Avatar/icon | Right side of card |
Scenario: Track bugs and features through development stages
<kanban:SfKanban ItemsSource="{Binding Issues}">
<kanban:KanbanColumn Title="Backlog" Categories="Open,New" />
<kanban:KanbanColumn Title="In Development"
Categories="In Progress"
MaximumLimit="3" />
<kanban:KanbanColumn Title="Testing"
Categories="Testing"
MaximumLimit="5" />
<kanban:KanbanColumn Title="Done"
Categories="Closed,Resolved" />
</kanban:SfKanban>Scenario: Organize tasks by team members with swim lanes
<kanban:SfKanban SwimlaneKey="Assignee"
ItemsSource="{Binding ProjectTasks}">
<kanban:SfKanban.SwimlaneHeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Image}" Width="30" Height="30"/>
<TextBlock Text="{Binding Title}" Margin="10,0"/>
</StackPanel>
</DataTemplate>
</kanban:SfKanban.SwimlaneHeaderTemplate>
</kanban:SfKanban>Scenario: Sort cards by priority within each column
<kanban:SfKanban SortingMappingPath="Priority"
SortingOrder="Descending"
ItemsSource="{Binding Tasks}"
CardDragEnd="OnCardDrop">
<!-- Columns -->
</kanban:SfKanban> private void OnCardDrop(object sender, KanbanDragEndEventArgs e)
{
kanban.RefreshKanbanColumn(e.TargetKey.ToString());
}Scenario: Handle card taps to show details dialog
kanban.CardTapped += (s, e) => {
var card = e.SelectedCard.DataContext as KanbanModel;
var dialog = new TaskDetailsDialog(card);
await dialog.ShowAsync();
};Symptoms: Kanban board is empty, no columns visible
Solutions:
Symptoms: Columns show but cards are missing
Solutions:
Symptoms: Cannot move cards between columns
Solutions:
Symptoms: Visual indicators not showing for WIP limits
Solutions:
Symptoms: All cards in single row, no swim lanes
Solutions:
Symptoms: Cards not sorted after drag-and-drop
Solutions:
Multiple Categories per Column:
Categories="Open,New,Backlog"Custom Model Requirements:
Workflow Restrictions:
Sorting with Drag-Drop:
Swim Lane Grouping:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.