$npx -y skills add DevExpress/agent-skills --skill devexpress-wpf-loading-indicatorsDisplay loading indicators in WPF apps with the DevExpress utility controls — SplashScreenManager (a window-level splash screen shown during startup or long-running operations, runs on a separate UI thread), LoadingDecorator (a content container that wraps any UI and shows an ind
| 1 | # DevExpress WPF Loading Indicators |
| 2 | |
| 3 | Three different controls for "show the user that something is happening" — but they're not interchangeable. **`SplashScreenManager`** is a window-level splash screen for app startup or long operations (runs on a **separate UI thread**, immune to main-thread freezes). **`LoadingDecorator`** is a content container that wraps any UI and shows an indicator while the content loads (configurable owner-lock). **`WaitIndicator`** is a simple panel shown inside a window (runs on the **main UI thread**). All three live in `DevExpress.Xpf.Core`. |
| 4 | |
| 5 | > The older **`DXSplashScreen`** API is **legacy**. New apps should use `SplashScreenManager` instead. |
| 6 | |
| 7 | ## When to Use This Skill |
| 8 | |
| 9 | Use this skill when you need to: |
| 10 | |
| 11 | - Show a splash screen at application startup |
| 12 | - Show a loading indicator over a region while it's fetching data |
| 13 | - Show a quick spinner while a button-triggered operation runs |
| 14 | - Decide between SplashScreenManager / LoadingDecorator / WaitIndicator |
| 15 | - Migrate from the legacy `DXSplashScreen` to `SplashScreenManager` |
| 16 | |
| 17 | ## Prerequisites & Installation |
| 18 | |
| 19 | ### NuGet Packages |
| 20 | |
| 21 | | Package | Provides | |
| 22 | |---------|---------| |
| 23 | | `DevExpress.Wpf.Core` | `SplashScreenManager`, `LoadingDecorator`, `WaitIndicator`, `ThemedWindow`, themes | |
| 24 | | `DevExpress.Wpf.ThemesLW` | Lightweight Themes (e.g. `LightweightTheme.Win11Light` / `Win11Dark`) — recommended for faster startup and lower memory | |
| 25 | |
| 26 | All three indicators live in the **`DevExpress.Wpf.Core` package**. Add `DevExpress.Wpf.ThemesLW` when using Lightweight Themes. |
| 27 | |
| 28 | ```bash |
| 29 | dotnet add package DevExpress.Wpf.Core |
| 30 | dotnet add package DevExpress.Wpf.ThemesLW |
| 31 | ``` |
| 32 | |
| 33 | All DevExpress packages in a project must share the same version. A valid DevExpress license is required. |
| 34 | |
| 35 | ## XAML Namespace |
| 36 | |
| 37 | ```xml |
| 38 | xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" |
| 39 | ``` |
| 40 | |
| 41 | `LoadingDecorator` and `WaitIndicator` are XAML elements (`<dx:LoadingDecorator>`, `<dx:WaitIndicator>`). `SplashScreenManager` is API-only — call methods from code (typically `App.xaml.cs`). |
| 42 | |
| 43 | ## The Three Indicators at a Glance |
| 44 | |
| 45 | | | SplashScreenManager | LoadingDecorator | WaitIndicator | |
| 46 | |---|---|---|---| |
| 47 | | **What it is** | Window-level splash screen | Content container with built-in loading indicator | Popup panel inside a window | |
| 48 | | **Runs on** | **Separate UI thread** — immune to main-thread freezes | Main UI thread | Main UI thread | |
| 49 | | **Typical use** | App startup; very long blocking operations | Wrap a panel/grid/chart while data loads | Quick "busy" indicator during a button-triggered operation | |
| 50 | | **API style** | Code (`Create*().Show()`) | XAML element (`<dx:LoadingDecorator>...</dx:LoadingDecorator>`) | XAML element (`<dx:WaitIndicator/>`) | |
| 51 | | **Trigger** | `Show()` / `ShowOnStartup()` / `CloseAll()` | Wraps content — auto-shows during content loading; `IsSplashScreenShown` for manual control | `DeferedVisibility` toggle | |
| 52 | | **Locks UI** | Optional, configurable (`InputBlockMode`) | Configurable per-element via `OwnerLock` (`Full` / `InputOnly` / `LoadingContent` / `None`) | Doesn't block input by itself | |
| 53 | | **Recommended for** | Startup, long-running modal operations | Slow-loading panels / regions | Simple inline "busy" | |
| 54 | |
| 55 | ## Before You Start — Ask the Developer |
| 56 | |
| 57 | If the host agent has a structured question-asking tool available, use it to ask these questions one at a time with clear options — for example, Claude Code's `AskUserQuestion` tool or GitHub Copilot's `askQuestions` tool. If no such tool is available, ask the questions directly in the chat response before generating code. |
| 58 | |
| 59 | 1. **What's the trigger?** |
| 60 | - App startup → **SplashScreenManager** (`ShowOnStartup`) |
| 61 | - A region that takes a long time to render → **LoadingDecorator** |
| 62 | - A button click t |