# Devexpress Wpf Scheduler

> Build WPF applications with the DevExpress Scheduler Control (SchedulerControl) — an Outlook-style calendar control for displaying and editing appointments, time regions, and resources. Use when adding SchedulerControl to a WPF project; binding to a DataSource with AppointmentsSource / ResourcesSource / AppointmentLabelsSource / AppointmentStatusesSource / TimeRegionsSource; configuring Appointme…

- **Type:** Skill
- **Install:** `agentstack add skill-devexpress-agent-skills-devexpress-wpf-scheduler`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [DevExpress](https://agentstack.voostack.com/s/devexpress)
- **Installs:** 0
- **Category:** [Productivity](https://agentstack.voostack.com/c/productivity)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [DevExpress](https://github.com/DevExpress)
- **Source:** https://github.com/DevExpress/agent-skills/tree/main/plugins/dx-wpf/skills/devexpress-wpf-scheduler
- **Website:** https://www.devexpress.com

## Install

```sh
agentstack add skill-devexpress-agent-skills-devexpress-wpf-scheduler
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# DevExpress WPF Scheduler Control

`DevExpress.Xpf.Scheduling.SchedulerControl` is a full-featured calendar / scheduling control: appointments, recurring activities, resources (people, rooms, equipment), labels, statuses, time regions, reminders, time zones. Seven view types out of the box (Day / Work Week / Week / Month / Timeline / Agenda / List). Bind to a data source through `DataSource.AppointmentsSource` + `AppointmentMappings`, or use the unbound mode for runtime-managed data.

## When to Use This Skill

Use this skill when you need to:

- Add a calendar / scheduling view to a WPF app
- Display recurring appointments, all-day events, multi-day events
- Group appointments by resource (people, rooms, equipment) or by date
- Bind to a data source via mappings — `AppointmentMappings`, `ResourceMappings`, custom fields
- Switch among the seven view types
- Customize appointment look via templates, styles, brushes
- Manage labels, statuses, time regions, reminders
- Implement an Outlook-clone in WPF

## Prerequisites & Installation

### NuGet Packages

| Package | Purpose |
|---------|---------|
| `DevExpress.Wpf.Scheduling` | Main package — `SchedulerControl`, all view types, all item types |
| `DevExpress.Wpf.Ribbon` | Required if you use Quick Actions → "Create Ribbon" to add ribbon UI |
| `DevExpress.Wpf.Printing` | Required for the Scheduler's print preview / export |

`DevExpress.Wpf.Scheduling` transitively brings `DevExpress.Wpf.Core` (themes, MVVM helpers).

### .NET (6/7/8+)

```bash
dotnet add package DevExpress.Wpf.Scheduling
```

Add to `.csproj`:

```xml

  net8.0-windows
  true

```

All DevExpress packages in a project must share the same version. A valid DevExpress license is required.

## Before You Start — Ask the Developer

1. **Target framework**: .NET 8+, .NET 6/7, or .NET Framework 4.x?
2. **Bound or unbound**: Does the scheduler persist data to an external source (DB, file, EF), or run with in-memory data created at runtime?
3. **Data model**: What classes represent appointments and resources? Map their fields to the Scheduler's properties via `AppointmentMappings` / `ResourceMappings`. See [data-binding.md](references/data-binding.md).
4. **Grouping**: `None` (a single timeline), `Resource` (one lane per resource), `Date` (lanes by date)?
5. **Active view**: Day, Work Week, Week, Month, Timeline, Agenda, or List? Each has its own configuration. See [views.md](references/views.md).
6. **Recurrence**: Are recurring appointments required? Yes → add `RecurrenceInfo` and `Type` mappings.
7. **Appearance**: Need custom appointment look (templates, styles), color themes (brushes), or both?

## Component Overview

### XAML Namespace

```xml
xmlns:dxsch="http://schemas.devexpress.com/winfx/2008/xaml/scheduling"
xmlns:dxschv="http://schemas.devexpress.com/winfx/2008/xaml/scheduling/visual"
```

`dxsch:` covers the main `SchedulerControl`, views, mappings, item types. `dxschv:` is for visual elements (`AppointmentContentPanel`, `AppointmentIntervalSubjectPresenter`, etc.) used inside custom templates.

### Element Hierarchy

```
SchedulerControl
├── DataSource
│   ├── AppointmentsSource           — bound collection of appointments
│   ├── ResourcesSource              — bound collection of resources
│   ├── AppointmentLabelsSource      — bound collection of labels
│   ├── AppointmentStatusesSource    — bound collection of statuses
│   ├── TimeRegionsSource            — bound collection of time regions
│   ├── AppointmentMappings          — field-to-property bindings (Start, End, Subject, etc.)
│   ├── ResourceMappings             — field-to-property bindings (Id, Caption, Brush)
│   ├── AppointmentLabelMappings
│   ├── AppointmentStatusMappings
│   └── TimeRegionMappings
├── Views                            — collection of view types (Day, Week, Month, etc.)
├── AppointmentItems                 — imperative collection (unbound mode)
├── ResourceItems                    — imperative collection (unbound mode)
├── LabelItems / StatusItems / TimeRegionItems
├── BrushSet                         — color palette for resources/labels/statuses
└── BrushProvider                    — theme-aware brush customization
```

### Two Operation Modes

| Mode | When | How |
|---|---|---|
| **Bound** | Production app, data persisted to DB / file / EF / API | Set `DataSource.AppointmentsSource` (and others) + `AppointmentMappings` |
| **Unbound** | Quick prototype, data managed in-memory at runtime | Use `SchedulerControl.AppointmentItems` (and other `*Items` collections) directly |

Mixed mode is supported: appointments via `DataSource`, but labels/statuses created inline via `LabelItems` / `StatusItems`.

## Documentation & Navigation Guide

### Getting Started
Refer to [references/getting-started.md](references/getting-started.md)

When you need to:
- Set up a .NET project with `DevExpress.Wpf.Scheduling`
- Build the minimum viable scheduler — view, data model, bindings
- Add a Ribbon UI for the scheduler (Quick Actions → "Create Ribbon")

### Data Binding
Refer to [references/data-binding.md](references/data-binding.md)

When you need to:
- Bind appointments, resources, labels, statuses, time regions
- Define mappings — `AppointmentMappings`, `ResourceMappings`, etc.
- Use `CustomFieldMapping` for project-specific extra fields
- Implement load-on-demand for large data sets
- Use Mapping Converters for custom storage formats (e.g., `string` ↔ `RecurrenceInfo`)

### Data Items (Appointments, Resources, Labels, Statuses, Time Regions, Reminders)
Refer to [references/data-items.md](references/data-items.md)

When you need to:
- Understand what each item type represents
- Configure recurring appointments (`AppointmentType.Pattern` + `RecurrenceInfo`)
- Define labels (categories) and statuses (availability) for appointments
- Block off time ranges with time regions
- Set reminders on appointments

### View Modes
Refer to [references/views.md](references/views.md)

When you need to:
- Pick between Day / Work Week / Week / Month / Timeline / Agenda / List views
- Configure view-specific properties (visible time, day count, work time only)
- Group by resource or date (`GroupType`)
- Switch views at runtime (`ActiveViewIndex`)
- Use multiple views of the same type with different settings

### Appearance Customization (Styles and Templates)
Refer to [references/styles-and-templates.md](references/styles-and-templates.md)

When you need to:
- Override the appointment content template (`AppointmentContentTemplate`)
- Use the built-in appointment presenters (`AppointmentIntervalSubjectPresenter`, `AppointmentLocationPresenter`, `AppointmentDescriptionPresenter`, `AppointmentImagesPanel`)
- Apply per-view styles (`AppointmentStyle`)
- Customize colors via `BrushSet` / `BrushName`
- Use `BrushProvider` for theme-aware customization (resource cells, headers, navigation buttons)
- Choose between New (Outlook2019) and Classic UI styles

## Quick Start Example

See the runnable quickstart sample in [examples/quickstart.cs](examples/quickstart.cs). If the sample includes companion XAML or resources, keep them alongside the C# entry point in the same `examples/` folder.

The following XAML shows the core `SchedulerControl` setup used by that quickstart:

```xaml

    
        
            
                
                    
                
                
                    
                
            
        
    

```

## Key Properties & API Surface

### `SchedulerControl`

| Property | Use |
|---|---|
| `DataSource` | `DataSource` object holding all bindings and mappings |
| `Views` | Collection of view objects (Day, Week, etc.) |
| `ActiveViewIndex` | Index into `Views` — picks the displayed view |
| `GroupType` | `None`, `Resource`, `Date` |
| `FirstDayOfWeek` | `Sunday`, `Monday`, etc. — affects Week / Work Week views |
| `WorkDays` / `WorkTime` / `CustomWorkTime` | Work-hours / work-days configuration |
| `AppointmentItems` / `ResourceItems` / `LabelItems` / `StatusItems` / `TimeRegionItems` | Imperative collections (unbound mode) |
| `SelectedAppointments` | Currently selected appointments |
| `BrushSet` / `BrushProvider` | Color customization |
| `AppointmentAdding`/`AppointmentAdded`, `AppointmentRemoving`/`AppointmentRemoved`, `AppointmentEditing`/`AppointmentEdited`, `AppointmentRestoring`/`AppointmentRestored` | Lifecycle events for tracking appointment changes. The cancelable `*ing` pre-events validate/veto an operation (`e.Cancel`); the `*ed` post-events carry `AppointmentCRUDEventArgs` (`AddToSource` / `UpdateInSource` / `DeleteFromSource`) for persisting to the data store |

### `DataSource` (Bound Mode)

Bindings and mappings live inside this object. Use either `` element syntax or assign in code.

### View Classes

`DayView`, `WorkWeekView`, `WeekView`, `MonthView`, `TimelineView`, `AgendaView`, `ListView` — each is a `ViewBase` descendant with its own configuration properties. See [views.md](references/views.md).

## Common Patterns

### Pattern 1: Minimal Unbound Scheduler

```xaml

```

That's it. The scheduler shows today, lets users create appointments by selecting time cells and typing. Appointments live in memory — they're lost on app close.

### Pattern 2: Bound to ViewModel Collections

```xaml

    
        
            
                
            
            
                
            
        
    

```

`Start` and `End` are the only required mappings for non-recurring appointments. Recurring ones additionally need `Type` and `RecurrenceInfo`.

### Pattern 3: Pre-Configure Views in XAML

```xaml

    
    
    

```

Adding any view to the `Views` collection in XAML overrides the default "all views enabled" behavior — only the listed views are active.

### Pattern 4: Custom Appointment Template

```xaml

    
        
            
                
                    
                
                
                    
                
            
        
    

```

## Troubleshooting

| Symptom | Cause | Solution |
|---|---|---|
| `dxsch:` prefix unresolved | Missing namespace or NuGet package | Add `xmlns:dxsch="http://schemas.devexpress.com/winfx/2008/xaml/scheduling"`; install `DevExpress.Wpf.Scheduling`. |
| Appointments don't appear | `AppointmentsSource` binding wrong, or required `Start`/`End` mappings not set | Verify the binding source and that the mapping property names match data class members exactly (case-sensitive). |
| Recurring appointments expand wrong / not at all | Missing `Type` and `RecurrenceInfo` mappings | Both are required for recurrence. `RecurrenceInfo` is typically stored as a string (XML form); use a `Mapping.Converter` if your storage format differs. |
| Changes to appointments don't persist | Unbound mode; or no two-way persistence layer | Switch to bound mode with an external store, or subscribe to the `AppointmentAdded` / `AppointmentRemoved` / `AppointmentEdited` events to detect changes for manual save. |
| `error CS0104: 'Application' is an ambiguous reference` | `DevExpress.Wpf.Scheduling` transitively references `System.Windows.Forms`; `enable` on .NET 6+ creates the clash | Qualify `System.Windows.Application` in `App.xaml.cs`. |
| Wrong view shows | `ActiveViewIndex` doesn't match the position in `Views` | Indexes are 0-based; verify the order of ``, ``, etc. in XAML. |
| Multiple resource bars don't appear | `GroupType="None"` | Set `GroupType="Resource"` to render one lane per resource. |
| Resource colors don't apply | `Brush` / `BrushName` not set on the resource items, or theme overrides | Set `ResourceMappings.Brush` / `BrushName`, or use `BrushSet` to define a palette. See styles-and-templates.md. |
| List view has no filter when paired with DateNavigator | By design — DateNavigator can't filter List view | Use the List view's built-in filtering UI instead. |

## Constraints & Rules

CRITICAL — follow these rules in every interaction:

1. **Build verification**: After changes, run `dotnet build` and report errors before claiming success.
2. **Target framework**: Windows-only (`net{X}-windows`, `UseWPF=true`).
3. **NuGet**: Use `DevExpress.Wpf.Scheduling`. All DevExpress packages share one version.
4. **XAML namespace**: `dxsch:` (scheduling), `dxschv:` (visual presenters used inside templates).
5. **Required mappings**: `Start` and `End` are always required in `AppointmentMappings`. For recurring appointments, also `Type` and `RecurrenceInfo`.
6. **Mapping names are case-sensitive** and must match the data class's property names exactly.
7. **Don't mix `*Items` and `*Source`** for the same item type. Pick one mode per item type — bound (`*Source` + mappings) or unbound (`*Items` directly).
8. **Application ambiguity**: When generating `App.xaml.cs` on .NET 6+, qualify `System.Windows.Application`.

## Using DevExpress Documentation MCP

- **Search**: `devexpress_docs_search(technology="WPF Scheduler", query="")`
- **Fetch**: `devexpress_docs_get_content(url="")`

Use MCP for: Outlook 365 integration, drag-and-drop customization, custom edit dialogs, time-zone handling, printing-template authoring, Save / Load layout — these are deep specialized topics beyond the core references.

---

## Next Steps

Start with **[Getting Started](references/getting-started.md)** for .NET 6/7/8+ project setup, or **[Getting Started (.NET Framework)](references/getting-started-dotnet-fw.md)** for .NET Framework 4.6.2+ projects. Then use **[Data Binding](references/data-binding.md)** for the mappings, **[Data Items](references/data-items.md)** to understand the model, **[Views](references/views.md)** to pick a view, and **[Styles and Templates](references/styles-and-templates.md)** for appearance.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [DevExpress](https://github.com/DevExpress)
- **Source:** [DevExpress/agent-skills](https://github.com/DevExpress/agent-skills)
- **License:** MIT
- **Homepage:** https://www.devexpress.com

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-devexpress-agent-skills-devexpress-wpf-scheduler
- Seller: https://agentstack.voostack.com/s/devexpress
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
