Skip to content

A vertical step indicator for WinUI 3 with animated status markers, expandable sub-steps, and theme-aware brushes.

Usage ​

xml
<controls:ProgressStepper x:Name="Stepper" Align="Left" />
csharp
Stepper.Steps = new ObservableCollection<ProgressStep>
{
    new() { Title = "Create account", Description = "Email and password" },
    new()
    {
        Title = "Set up profile",
        Children =
        {
            new ProgressStep { Title = "Upload avatar" },
            new ProgressStep { Title = "Write a short bio" }
        }
    },
    new() { Title = "Verify identity", Status = ProgressStepperStepStatus.Skipped },
    new() { Title = "All done" }
};

Stepper.Next();

Use ObservableCollection<ProgressStep> for Steps and Children so additions and removals are picked up. ProgressStep raises PropertyChanged, so edits to Title, Description and Status update the control.

ProgressStepper ​

MemberTypeDefaultDescription
StepsIList<ProgressStep>?nullSteps to display.
Currentint0Index of the active step. A value equal to the step count means everything is completed.
CurrentChildint0Index of the active sub-step inside the active step.
AlignProgressStepperStepperAlignRightRight: rail on the right, labels on its left. Left: rail on the left, labels on its right.
ShowStepLabelbooltrueShows the step label when a step has no Description.
StepLabelFormatstring"Step {0}"Format of the step label; {0} is the 1-based step number. Set it to localize.
TitleTemplateDataTemplate?nullCustom title content. The data context is the ProgressStepperStepStatus.
DescriptionTemplateDataTemplate?nullCustom description content. The data context is the ProgressStepperStepStatus.
Next()boolAdvances through sub-steps, then steps. Returns false at the end.
Previous()boolMoves back through sub-steps, then steps. Returns false at the start.
Reset()voidReturns to the first step.

ProgressStep ​

PropertyTypeDescription
IdstringOptional identifier for your own use.
TitlestringStep title.
Descriptionstring?Secondary text under the title.
StatusProgressStepperStepStatus?Overrides the status derived from Current and CurrentChild.
ChildrenIList<ProgressStep>Sub-steps, shown while the step is in progress.

ProgressStepperStepStatus: NotStarted, InProgress, Completed, Skipped.

Theming ​

Set any of these properties directly, or override the matching theme resource.

PropertyTheme resource
PrimaryForegroundProgressStepperPrimaryBrush
SecondaryForegroundProgressStepperSecondaryBrush
TertiaryForegroundProgressStepperTertiaryBrush
RailBrushProgressStepperRailBrush
SuccessBrushProgressStepperSuccessBrush
SuccessFillBrushProgressStepperSuccessFillBrush
AccentBrushProgressStepperAccentBrush
AccentTrackBrushProgressStepperAccentTrackBrush

Default, Light and HighContrast dictionaries are included.

Accessibility ​

Each step exposes its title and state (for example "Set up profile, in progress") to UI Automation, and the active step is reported as current.

ProgressStepper

Demo ​

you can run demo and see this feature.

Released under the MIT License.