Install
$ agentstack add skill-devexpress-agent-skills-devexpress-wpf-data-editors ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
DevExpress WPF Data Editors
The DevExpress Data Editors library is a comprehensive set of input controls for WPF — text editors, numeric editors, date/time pickers, lookups, combos, list boxes, image/color editors, visualization editors, and simple buttons. All editors share a common base type (DevExpress.Xpf.Editors.BaseEdit) with a single EditValue property — the value the user is editing — plus a uniform API for masking, validation, formatting, and in-place use inside GridControl, PropertyGrid, Bar items, and similar containers.
> Two control families: editors that inherit from BaseEdit (have EditValue, support masks, validation, in-place mode) vs simple controls that do not (SimpleButton, DropDownButton, SplitButton, FlyoutControl, RangeControl, Calculator, DateNavigator, DateRangeControl, TimePicker). The two families are documented separately — see Navigation Guide.
When to Use This Skill
Use this skill when you need to:
- Add a text input with masked input, validation, or formatting
- Provide a combobox, listbox, or lookup with single or multiple selection
- Edit numeric, currency, or percentage values with constrained input
- Pick dates, times, ranges, or display a calendar
- Browse for a file path, edit a password, or accept a long memo
- Show visualization editors: progress bars, sparklines, ratings, trackbars
- Show image or color pickers (inline or popup)
- Embed a DevExpress editor as an in-place editor inside
GridControl,PropertyGrid,Bar, etc. - Add buttons inside a
ButtonEdit(or its descendants) for clear / apply / browse actions - Customize masks (numeric, date-time, simple, regex, custom)
Prerequisites & Installation
NuGet Packages
| Package | Purpose | |---------|---------| | DevExpress.Wpf.Core | Simple controls (SimpleButton, DropDownButton, SplitButton), shared infrastructure | | DevExpress.Wpf.Grid.Core | Required when you use LookUpEdit / SearchLookUpEdit / token lookups (these classes live in DevExpress.Xpf.Grid.LookUp) |
The Data Editors themselves (TextEdit, DateEdit, etc.) are part of DevExpress.Wpf.Core. There is no separate "Editors" NuGet — installing DevExpress.Wpf.Core brings them in.
.NET (6/7/8+)
dotnet add package DevExpress.Wpf.Core
For lookups:
dotnet add package DevExpress.Wpf.Grid.Core
Add net8.0-windows and true to .csproj.
.NET Framework (4.6.2+)
Either use the same NuGet packages, or reference the assemblies installed by the Unified Component Installer (DevExpress.Xpf.Core.v.dll).
Important: All DevExpress packages in a project must share the same version. A valid DevExpress license is required.
Before You Start — Ask the Developer
Before generating code, confirm:
- Target framework: .NET 8+, .NET 6/7, or .NET Framework 4.x?
- Standalone or in-place: Will the editor sit on a form, or be embedded inside
GridControl/PropertyGrid(which uses the*EditSettingsvariant)? - Editor type: Which editor fits the data? See [editor-varieties.md](references/editor-varieties.md) for the full inventory.
- Operation mode: For editors that support
StyleSettings(ComboBoxEdit, LookUpEdit, ListBoxEdit, DateEdit, TrackBarEdit, ProgressBarEdit, SparklineEdit) — which sub-mode? (e.g.,CheckedvsTokenvsRadioComboBox.) - Masking: Does the input need a mask (
Numeric,DateTime,Simple,RegEx, etc.)? See [masks.md](references/masks.md). - Validation: Inline validation via
Validateevent,IDataErrorInfo, orDataAnnotations?
> Rule: If the developer's answer is ambiguous or missing, ask before generating code. Do not guess.
Component Overview
The library splits into two families:
Family 1: BaseEdit Descendants (Have EditValue)
All editors that inherit from DevExpress.Xpf.Editors.BaseEdit share:
EditValue— the value being edited. Bind this for two-way data binding.StyleSettings— switches the editor's operation mode (e.g., regular vs checked vs token ComboBox). NOT related to WPF'sStyleproperty.InvalidValueBehavior,AllowNullInput,DisplayFormatString— value handling- In-place version: an
*EditSettingsclass (e.g.,TextEditSettings,ComboBoxEditSettings) used inside grid columns, property-grid cells, etc. - Mask support: via
MaskType,Mask,MaskUseAsDisplayFormat(most text editors) - Validation:
Validateevent,Validation.HasError,BaseEdit.HasValidationError
Family 2: Simple Controls (No EditValue)
Live in DevExpress.Xpf.Core and DevExpress.Xpf.Editors:
SimpleButton— themed buttonDropDownButton,SplitButton— buttons with popupsCalculator— standalone calculator UIFlyoutControl— modal/modeless popup overlayRangeControl— interactive range slider with a visualization areaDateNavigator,DateRangeControl,TimePicker— standalone date/time pickers (the date/time editors likeDateEditare in Family 1)
These are documented in [simple-controls.md](references/simple-controls.md).
XAML Namespaces
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
dxe:— most editors (TextEdit,ButtonEdit,ComboBoxEdit,DateEdit, etc.)dxg:—LookUpEditand its style-settings variants (live inDevExpress.Xpf.Grid.LookUp)dx:—SimpleButton,DropDownButton,SplitButton, theme manager
Documentation & Navigation Guide
Getting Started
Refer to [references/getting-started.md](references/getting-started.md)
When you need to:
- Set up a new .NET 6/7/8+ WPF project with Data Editors
- Add the right NuGet packages
- Place the first
TextEdit/DateEdit/ComboBoxEditon a window - Bind
EditValuetwo-way to a ViewModel property
Editor Varieties — BaseEdit Descendants and Operation Modes
Refer to [references/editor-varieties.md](references/editor-varieties.md)
When you need to:
- Pick the right editor for a data type (text, numeric, date, picker, list)
- Understand which editors have
EditValue(and bindable two-way) - Switch a
ComboBoxEdit/ListBoxEdit/LookUpEditbetween default, checked, radio, token, and search modes viaStyleSettings - Switch
DateEditbetween calendar / month / picker modes - Switch
TrackBarEdit/ProgressBarEdit/SparklineEditbetween visualization styles
Simple Controls — Non-BaseEdit Controls
Refer to [references/simple-controls.md](references/simple-controls.md)
When you need to:
- Add a themed button (
SimpleButton), dropdown button, or split button - Show a standalone calendar (
DateNavigator), date-range picker, or time picker - Embed a calculator UI
- Use
FlyoutControlfor popup/notification overlays - Use
RangeControlfor interactive range selection with a visualization track
Masks
Refer to [references/masks.md](references/masks.md)
When you need to:
- Restrict input to numeric, currency, or percentage values
- Enforce a date/time format with caret navigation
- Match a fixed pattern like a phone number, zip code, or SSN (Simple masks)
- Apply a regex pattern with autocomplete
- Implement a custom mask via
CustomMaskevent - Save mask literals into
EditValue, or use mask as display format
Buttons in ButtonEdit Descendants
Refer to [references/buttons.md](references/buttons.md)
When you need to:
- Add custom buttons inside
ButtonEdit(orComboBoxEdit,LookUpEdit,SpinEdit,BrowsePathEdit,PopupBaseEdit,PopupColorEdit, etc. — allButtonEditdescendants) - Hide the default button, position buttons on the left, change glyphs
- Bind button
Command/Clickto ViewModel actions - Use
ButtonInfo.GlyphKindpredefined glyphs, or a customContentTemplate
Quick Start Example
A registration form using common editors with two-way binding:
public class MainViewModel : ViewModelBase {
public string Email { get; set; } = "";
public string Password { get; set; } = "";
public DateTime Birthday { get; set; } = DateTime.Today;
public string Country { get; set; } = "";
public ObservableCollection Countries { get; } =
new() { "USA", "Canada", "UK", "Germany" };
public ICommand RegisterCommand => new DelegateCommand(() => { /* ... */ });
}
> Two-way binding always uses EditValue, not Text or Value — EditValue is the canonical bindable property on BaseEdit.
Key Properties & API Surface
BaseEdit (Base for All Editors)
| Property | Type | Description | |---|---|---| | EditValue | object | The bound value. Always two-way bindable. Type depends on the editor. | | StyleSettings | BaseEditStyleSettings | Switches the editor's operation mode. Not the WPF Style property. | | IsReadOnly | bool | Read-only mode. | | AllowNullInput | bool | When true, Ctrl-D / Ctrl-0 clears the value. | | InvalidValueBehavior | InvalidValueBehavior | What happens when value is invalid: WaitForValidValue (default) or AllowLeaveEditor. | | DisplayFormatString | string | .NET format string used in display mode (when mask isn't used as display). | | Validate | event | Per-editor validation hook. | | HasValidationError | bool | True when the current input is invalid. |
TextEdit (Common Base for Most Text-Style Editors)
| Property | Type | Description | |---|---|---| | Text | string | The raw text representation. Prefer EditValue for binding. | | MaskType | MaskType | None, Numeric, DateTime, DateTimeAdvancingCaret, Simple, Regular, RegEx, Custom, plus date-only / time-only / timespan / date-time-offset. | | Mask | string | The mask string. Format depends on MaskType. | | MaskUseAsDisplayFormat | bool | Use the mask for display, not just edit. | | MaskShowPlaceHolders | bool | Show _ placeholders for empty positions (RegEx mode). | | MaskAutoComplete | AutoCompleteType | None, Strong, Optimistic, Default (RegEx mode). | | MaskSaveLiteral | bool | Include literal characters in EditValue (Simple/Regular mode). | | MaskCulture | CultureInfo | Override the culture used by the mask. |
ButtonEdit (Base for All Editors with Buttons)
| Property | Type | Description | |---|---|---| | Buttons | ButtonInfoCollection | Collection of ButtonInfo items shown inside the editor. | | AllowDefaultButton | bool | Show the editor's built-in default button (e.g., the dropdown arrow on ComboBoxEdit). |
ButtonInfo
| Property | Type | Description | |---|---|---| | Content | object | Button content (text, glyph image, etc.). | | ContentTemplate | DataTemplate | Custom rendering for the button. | | GlyphKind | GlyphKind? | Predefined glyph: Apply, Cancel, DropDown, Down, Up, Left, Right, Plus, Minus, Search, Refresh, Edit, Undo, Redo, First, Last, NextPage, PrevPage, Custom, etc. | | IsLeft | bool | Place the button on the left side of the editor (default: right). | | Visibility | Visibility | Standard WPF visibility. | | Command / CommandParameter | ICommand / object | MVVM command binding. | | Click | event | Click event handler. |
Common Patterns
Pattern 1: Bind EditValue Two-Way to a ViewModel
Mode=TwoWay is usually the default for EditValue on most editors, but specifying it explicitly is good practice. UpdateSourceTrigger=PropertyChanged writes the binding source on every keystroke; the default LostFocus is fine for forms but not for live validation.
Pattern 2: Operation Mode via StyleSettings
Switch ComboBoxEdit to a checked combo:
Switch LookUpEdit to search mode with token output:
Pattern 3: Masked Phone Input
Pattern 4: ButtonEdit with Clear and Apply Buttons
Pattern 5: In-Place Editor Inside GridControl
> Important: When embedding inside a grid, use the *EditSettings class (e.g., SpinEditSettings), NOT the editor class itself (SpinEdit). The settings class configures the inline editor; the grid creates the actual editor on demand.
Troubleshooting
| Symptom | Cause | Solution | |---|---|---| | EditValue doesn't update the ViewModel | Default UpdateSourceTrigger=LostFocus — value writes when focus leaves | Set UpdateSourceTrigger=PropertyChanged if you need keystroke-level updates. | | Mask is ignored when value is set via Text | Mask types Numeric / DateTime only apply when value is set via EditValue | Bind EditValue (not Text); the mask honors the value's type. | | dxe: prefix unresolved in XAML | Missing namespace declaration | Add xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors". | | LookUpEdit not found in dxe: namespace | LookUpEdit lives in the grid namespace, not editors | Use xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" and `. | | Focus won't leave a masked editor | Default InvalidValueBehavior = WaitForValidValue — partial value blocks leaving | Set InvalidValueBehavior = AllowLeaveEditor if partial values are acceptable. | | Buttons collection ignores items | AllowDefaultButton="True" keeps the default button visible; only descendants of ButtonEdit have Buttons | Set AllowDefaultButton="False" to hide the default; verify the control inherits from ButtonEdit. | | Mask not applied in GridControl cell | Editor settings ignored — used TextEdit instead of TextEditSettings in EditSettings | Use *EditSettings (e.g., ) inside . | | EditValue is always string from a masked numeric editor | Bound to Text instead of EditValue, or EditValue type isn't numeric | Bind EditValue to a decimal / double / int property. | | Operation mode doesn't change anything | Set Style property by mistake; or assigned wrong settings type | Assign to StyleSettings (e.g., ); match the settings class to the editor (ComboBoxStyleSettings, CheckedComboBoxStyleSettings`, etc.). |
Constraints & Rules
CRITICAL — follow these rules in every interaction:
- Build verification: After any changes, run
dotnet buildand report errors before claiming success. - Target framework: Editors are Windows-only.
.csprojmust targetnet{X}-windowswithtrue. - NuGet packages:
DevExpress.Wpf.Corefor most editors; addDevExpress.Wpf.Grid.CoreforLookUpEditfamily. - Version consistency: All DevExpress packages share the same version (e.g., 26.1.x).
- XAML namespaces:
dxe:for editors,dxg:forLookUpEdit,dx:for simple buttons and themes. Don't mix them up. - Bind
EditValue, notText:EditValueis the canonical bindable property onBaseEdit.Textis a string view and bypasses type-aware mask handling. StyleSettingsis NOT WPFStyle: it's a DevExpress-specific operation-mode switch. Don't confuse the two.- In-place uses
*EditSettings: insideGridControlcolumns orPropertyGridcells, embed `(the settings class), not` (the control class). - License: DevExpress requires a valid license. Remind the developer on license-related errors.
Using DevExpress Documentation MCP
If the DxDocs MCP server is available, supplement this skill with:
- Search:
devexpress_docs_search(technology="WPF Editors", query="") - Fetch:
devexpress_docs_get_content(url="")
When to use MCP vs. built-in references:
- Built-in references: Editor inventory, operation modes, masks, button customization.
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: DevExpress
- Source: DevExpress/agent-skills
- License: MIT
- Homepage: https://www.devexpress.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.