ProgressRing

April 2, 2026 · View on GitHub

A circular progress indicator supporting both determinate and indeterminate states with an animated arc. Inherits from RangeBase so Minimum, Maximum, and Value work the same as ProgressBar.

Basic usage

<!-- Indeterminate (spinning) -->
<ProgressRing IsIndeterminate="True" />

<!-- Determinate (50%) -->
<ProgressRing Value="50" />

<!-- Custom size -->
<ProgressRing IsIndeterminate="True" Width="64" Height="64" />

Properties

PropertyTypeDefaultDescription
Valuedouble0Current progress value (inherited from RangeBase)
Minimumdouble0Minimum value
Maximumdouble100Maximum value
IsIndeterminateboolfalseSpinning animation — use when duration is unknown
Thicknessdouble3Stroke width of the arc
PreserveAspectbooltrueKeeps the ring square — enforces MinWidth/MinHeight of 32
StartAngledouble0Starting angle of the arc in degrees
EndAngledouble360Ending angle of the arc in degrees

Sizes

<!-- Small inline indicator -->
<ProgressRing IsIndeterminate="True" Width="16" Height="16" Thickness="2" />

<!-- Standard -->
<ProgressRing IsIndeterminate="True" Width="32" Height="32" />

<!-- Large hero indicator -->
<ProgressRing IsIndeterminate="True" Width="96" Height="96" Thickness="6" />

Binding to a value

<ProgressRing Value="{Binding UploadProgress}"
              Minimum="0"
              Maximum="100" />

Custom arc range (partial ring)

<!-- Bottom half only -->
<ProgressRing Value="50"
              StartAngle="180"
              EndAngle="360" />

Styling

The ring uses AccentLinearGradientBrush for the arc foreground and ControlFillColor3 for the track by default. Override via standard property setters:

<ProgressRing IsIndeterminate="True"
              Foreground="{DynamicResource SystemFillColorSuccess}"
              Background="Transparent" />