Siticone Smooth Linear Progress
The SiticoneSmoothLinearProgress is a highly fluid, indeterminate progress indicator.
Unlike standard marquees, it simulates organic motion using randomized speed variations and "breathing" segment lengths.
It supports single or dual-bar modes, creating a sophisticated, modern loading experience perfect for uncertain wait times.
Core Animation
Properties controlling the fundamental movement and state of the progress bar.
| Property | Type | Description & Usage Example |
|---|---|---|
IsAnimating |
bool | progressBar.IsAnimating = true; Starts or pauses the animation loop. Setting this to false freezes the bar in its current position. |
AnimationSpeed |
float | progressBar.AnimationSpeed = 300f; The base velocity of the moving segment in pixels per second. The actual speed fluctuates randomly around this value for a natural feel. |
ReverseDirection |
bool | progressBar.ReverseDirection = true; When true, the primary animation flow moves from right to left instead of left to right. |
Dual-Bar Mode
Enable a secondary progress indicator for a more complex and engaging visual effect.
| Property | Type | Description & Usage Example |
|---|---|---|
AllowAlternateMode |
bool | progressBar.AllowAlternateMode = true; Activates the secondary progress bar, creating two moving segments that can move in sync or opposition. |
AllowSharedPath |
bool | progressBar.AllowSharedPath = true; If true, both bars travel along the same vertical center line. If false, they are offset vertically to run on parallel tracks. |
Breathing & Segments
The "breathing" effect refers to the rhythmic expansion and contraction of the progress segment length.
| Property | Type | Description & Usage Example |
|---|---|---|
OscillationSpeed |
float | progressBar.OscillationSpeed = 0.5f; Controls the frequency of the length change cycle. Higher values create a rapid "pulse", while lower values create a slow "breath". |
SegmentMinLength |
float | progressBar.SegmentMinLength = 20f; The shortest possible length (in pixels) the bar will shrink to during animation. |
SegmentMaxLength |
float | progressBar.SegmentMaxLength = 150f; The longest possible length (in pixels) the bar will stretch to during animation. |
Visual Appearance
Customize the colors and dimensions of the progress indicators.
| Property | Type | Description & Usage Example |
|---|---|---|
PrimaryColor |
Color | progressBar.PrimaryColor = Color.DodgerBlue; The color of the main progress segment. |
SecondaryColor |
Color |
progressBar.SecondaryColor = Color.Cyan;
The color of the second segment (visible only when AllowAlternateMode is true).
|
StrokeThickness |
int | progressBar.StrokeThickness = 6; The height/thickness of the progress lines in pixels. |
Control Methods
Programmatic control over the animation lifecycle.
// Starts the animation loop if it isn't running
progressBar.StartAnimation();
// Pauses the animation at the current frame
progressBar.StopAnimation();
// Stops animation and resets all internal counters (elapsed time, position) to zero
progressBar.ResetAnimation();
Designer & Smart Tags
The component includes a comprehensive Smart Tag menu for rapid visual configuration.
| Feature Category | Capabilities |
|---|---|
Theme Presets |
Instantly apply professional animation styles:
|
Settings |
Copy/Paste Settings: Easily duplicate the exact configuration from one progress bar to another. |
Detailed Usage Examples
Example 1: Indeterminate Search Bar
Creating a subtle loading effect below a search box while fetching results.
private async void txtSearch_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Show and start loader
loaderBar.Visible = true;
loaderBar.ResetAnimation();
// Configure for subtle effect
loaderBar.StrokeThickness = 2;
loaderBar.PrimaryColor = Color.FromArgb(0, 120, 215);
loaderBar.AllowAlternateMode = false;
await PerformSearchAsync(txtSearch.Text);
// Hide when done
loaderBar.Visible = false;
loaderBar.StopAnimation();
}
}
Example 2: "Busy" System State
Using Dual-Bar mode to indicate high system activity or critical processing.
private void SetBusyState(bool isBusy)
{
if (isBusy)
{
// High activity configuration
busyBar.AllowAlternateMode = true;
busyBar.AllowSharedPath = false; // Parallel tracks
busyBar.PrimaryColor = Color.Orange;
busyBar.SecondaryColor = Color.Red;
// Fast, erratic movement
busyBar.AnimationSpeed = 400f;
busyBar.OscillationSpeed = 1.5f;
busyBar.StartAnimation();
}
else
{
busyBar.StopAnimation();
}
}
Example 3: Custom "Breathing" Divider
Using the control as a decorative, animated separator between UI sections.
private void SetupDivider()
{
// Slow, calming settings
dividerBar.StrokeThickness = 1;
dividerBar.PrimaryColor = Color.LightGray;
// Very slow movement
dividerBar.AnimationSpeed = 50f;
// Long segments that slowly expand/contract
dividerBar.SegmentMinLength = 100f;
dividerBar.SegmentMaxLength = 300f;
dividerBar.OscillationSpeed = 0.2f;
dividerBar.StartAnimation();
}