Cross-Platform Enhancements v25.2

.NET 10 and Visual Studio 2026 Support

The following DevExpress component libraries now support .NET 10 and Visual Studio 2026:

 

JetBrains Rider Support

You can do even more when using JetBrains Rider alongside the following DevExpress products:

  • All Products: Create new projects using the same rich set of DevExpress templates available in Visual Studio and VS Code.
  • WinForms: Visually configure and customize major DevExpress WinForms UI components directly within Rider's designer. Learn more
  • Reports: Create and customize reports using the DevExpress Report Designer. Learn more

The ability to use DevExpress UI components within Rider was developed in collaboration with the JetBrains team.

 

DevExpress Rider Support

 

DevExpress Template Kit

We updated the DevExpress Template Kit to support cross-platform development and major IDEs:

  • Visual Studio
  • Visual Studio Code
  • JetBrains Rider

The DevExpress Template Kit for Visual Studio Code and Rider now runs on Windows and macOS and allows you to create projects based on pre-designed templates.

Our Template Kit also includes new project and item templates for WinForms, WPF, Reports, and BI Dashboard:

DevExpress Template Kit

 

Accessibility (A11Y)

In v25.2, we expanded our accessibility support to include more UI controls and platforms:

 

Artificial Intelligence (AI) v25.2

New AI-powered Extensions

NOTE: DevExpress does not offer a REST API or ship any built-in LLMs/SLMs. Instead, we follow the BYOL ("bring your own license") principle. To use these features, you need to have an active subscription to AI services (e.g., Azure, Open AI, Google Gemini, Mistral AI, etc.) and obtain the REST API endpoint, key, and model deployment name. These variables must be specified at runtime to enable DevExpress AI-powered Extensions in your application.

AI Tool Calling

Natural Language Control for UI Components

DevExpress v25.2 introduces a cross-platform API that extends Microsoft.Extensions.AI tool-calling capabilities and enables natural-language control over application UI and logic.

Unlike standard tool-calling APIs that restrict parameters to strings or JSON schemas, the DevExpress AI Tool Calling API accepts any object type as a method argument. Developers can inject UI components (for example, Grid Control, Forms, or User Controls), ViewModels, or custom business objects directly into tool methods. The API resolves target objects at runtime based on context and descriptive metadata.

When users interact with the DevExpress AI Chat Control, the language model analyzes each request, selects the appropriate tool, resolves the required instance, and invokes the corresponding method to modify the application in real time. You can also organize tools into contexts and enable, disable, or remove these contexts dynamically based on application state or workflow.

 

Documentation

 

AI Chat Control Enhancements — Blazor, WinForms, WPF

DevExpress AI Chat Controls for Blazor, WinForms, and WPF include the following enhancements designed to improve user interaction and expand integration capabilities:

  • Display Tool Information
    Chat messages can display information about invoked AI functions (Model Context Protocol tools) in chat responses.

  • Resources
    Users can select one or more resources to include in the chat request. Supported resource content types: binary files (images, documents) and non-file resources (for example, logs retrieved from Model Context Protocol servers).

  • Chat Title and Clear History
    The chat UI can display a customizable chat title and a "Clear Chat" button (removes all messages from the conversation history except system messages).

  • Multiple AI Providers
    Applications can use multiple AI providers within the AI Chat Control. Users can switch models at runtime, compare responses side by side, and run independent sessions.

  • Single-Click Prompt Submission
    Users can now send prompt suggestions with a single click.

  • Resizable Input Area
    The chat's input area automatically expands as the user types.

  • New Project Templates
    Our new chat-based project templates incorporate the AI Chat Control within a DevExpress-powered WinForms and/or WPF application. Built-in Retrieval-Augmented Generation (RAG) delivers context-aware answers based on local document data, including PDF, DOCX, RTF, TXT, and HTML files.

Learn more

 

DevExpress Documentation MCP Server

The DevExpress Documentation MCP Server connects GitHub Copilot and other AI-based coding assistants to our comprehensive documentation database and gives you instant access to 300,000+ help topics without leaving your development environment.

With our MCP Server, you can generate code for DevExpress UI components using natural language prompts, get contextual answers about APIs and implementation patterns, search DevExpress help topics with semantic understanding, and more. The MCP Server delivers real-time technical guidance for DevExpress controls across all supported platforms: from WinForms and VCL to Angular and Blazor.

The DevExpress MCP Server works with Visual Studio 2022, VS Code, Cursor, JetBrains Rider, and any MCP-compatible AI assistant (GitHub Copilot, JetBrains AI Assistant) or CLI Agent (Gemini CLI, Claude Code, GitHub Copilot CLI).

DevExpress MCP Server

DevExpress MCP Server: Configure Your AI-powered Coding Assistant (Documentation)

Transform Your Development Experience with the DevExpress Documentation MCP Server (Blog Post)

 

WinForms Controls v25.2

.NET 10 and Visual Studio 2026 Support

DevExpress WinForms component libraries now support .NET 10 and Visual Studio 2026.

 

JetBrains Rider Support

You can now visually configure and customize major DevExpress UI components directly within Rider's designer.

The ability to use DevExpress components within Rider was developed in collaboration with the JetBrains team.

DevExpress Rider Support

 

#Project Templates for JetBrains Rider

The DevExpress Template Kit is fully integrated into JetBrains Rider. You can create new projects using the same rich set of DevExpress templates available in Visual Studio and VS Code.

 

DateOnly & TimeOnly Support in Charts

The DevExpress WinForms Chart Control supports .NET DateOnly and TimeOnly data types. You can use these types to specify arguments, values, workday/work time options, strips, constant lines, and scale breaks, as well as to apply data filters, sorting, and summaries.

DateOnly and TimeOnly Support in WinForms Charts, DevExpress

 

Accessibility

#Accessible Column and Band Operations Through Keyboard Input

The DevExpress WinForms Data Grid includes full keyboard access to column headers and bands. Users can execute the following operations using the keyboard:

ActionKeyboard ShortcutNotes
Focus a column headerCtrl+Shift+TABFocus moves from any row to header row.
Unfocus a column headerFocus returns to the grid's top row.
Unfocus a column headerCtrl+TABFocus returns to the previously selected data row.
Focus a band (from column headers) Moves focus from the column header area to bands.
Navigate between column headers/bands, , TAB, HOME, ENDMoves focus across column headers/bands.
Resize column/band widthShift+, Shift+Decreases/increases column/band width.
Reorder columns/bandsCtrl+, Ctrl+, Ctrl+, Ctrl+Moves a column header/band horizontally or vertically based on layout.
Sort by the focused columnSpace, EnterApplies sorting in ascending order or reverses sort order.
Add/remove a column to/from multi-column sortingShift+Space, Ctrl+SpaceAdds to or removes from existing sort sequence.
Open a column filter popupAlt+, F4 Fires FilterPopup-related events.
Open a column/band context menuShift+F10, Fires PopupMenuShowing, GridMenuItemClick.

Accessible Column and Band Operations Through Keyboard Input - WinForms Data Grid, DevExpress

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.

You can activate column/band keyboard navigation for all Data Grids used in your application or for individual Views.

Property NameDescription
WindowsFormsSettings.KeyboardNavigationExtensions Activates column/band keyboard navigation for all Data Grids used in an application.
GridOptionsNavigation.AllowHeaderNavigation Activates column/band keyboard navigation for an individual View.

The new BandedGridView.FocusedBand property specifies the currently focused band and allows you to set focus programmatically.

 

Documentation

 

#Screen Reader Enhancements for Data Editors

DevExpress WinForms Data Editors ship with improved screen reader support for text-based editors. Users can navigate and select text more effectively within the range read by the screen reader.

Enhancements include:

  • Select text within the screen reader's reading range.
  • Move the cursor to the previous or next character or word.
 

AI Chat Control

#Manage Multiple Chat Clients

The DevExpress WinForms AI Chat Control supports use of multiple AI services within a single application.

Use cases include:

  • Compare responses from different AI providers side by side.
  • Run independent sessions with separate histories.
  • Allow users to select or switch AI providers at runtime.

Manage Multiple Chat Clients in WinForms AI Chat Control, DevExpress

Use the AddKeyedChatClient method to register AI chat clients in the service collection with unique keys at application startup. The following code snippet registers Azure OpenAI and Ollama clients:

  • Program.cs
// Create an Azure OpenAI client.
var azureOpenAiClient = new Azure.AI.OpenAI.AzureOpenAIClient(AzureOpenAIEndpoint, AzureOpenAIKey);

// Create an Ollama API client.
IChatClient ollamaClient = new OllamaApiClient(new Uri("http://localhost:11434/"), "MODEL_NAME");

// Create a service collection to register AI chat clients.
var serviceCollection = new ServiceCollection();

// Register the Azure OpenAI client with a unique key.
serviceCollection.AddKeyedChatClient("azureOpenAIClient", azureOpenAiClient.GetChatClient(ModelId).AsIChatClient());

// Register the Ollama client with a different key.
serviceCollection.AddKeyedChatClient("ollamaClient", ollamaClient);

// Add DevExpress AI Desktop services (required for AIChatControl).
serviceCollection.AddDevExpressAIDesktop();

You can place multiple AI Chat Controls on the same form (for example, to test model quality or host specialized agents) or use a single AI Chat Control and switch between AI providers at runtime.

Set the AIChatControl.ChatClientServiceKey property to select the service:

  • C#
// Create and configure an Azure OpenAI chat control.
AIChatControl azureChat = new AIChatControl() {
    ChatClientServiceKey = "azureOpenAIClient",
    Dock = DockStyle.Right
};

// Create and configure an Ollama chat control.
AIChatControl ollamaChat = new AIChatControl() {
    ChatClientServiceKey = "ollamaClient",
    Dock = DockStyle.Left
};

Documentation

 

#Resources

Our WinForms AI Chat Control can now access external data sources (such as MCP (Model Context Protocol) servers) or dynamically generated content through resources. Resources extend the chat context with additional input (for example, local documents, logs, or images). The AI model uses this data to generate more accurate and context-aware responses.

After you assign resources the AI Chat Control displays the Attach Context (+) button. Users can select one or more resources to include in the chat request. A built-in search box helps users quickly locate desired items when the resource list is long.

Resources - WinForms AI Chat Control, DevExpress

Supported resource content types:

  • Plain Text
  • PDF
  • Image

You can also customize resource appearance. Use the new SetResourceItemTemplate method to supply a Razor-based template for resource items displayed in the chat's "Attach Context" dropdown.

Customize Resource Appearance - WinForms AI Chat Control, DevExpress

Documentation

 

#Tool Calling API

AI Tool Calling connects your Windows Forms application logic with natural language input. The WinForms AI Chat Control can invoke methods annotated with metadata that describes purpose, input parameters, and optional target objects.

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.

The DevExpress implementation extends standard function calling with the following enhancements:

  • Target-Aware Tools
    Tools can operate on specific object instances (UI controls, forms, data services, business objects). AI resolves targets from context.

  • Flexible Tool Contexts
    Group tools into contexts. You can add, remove, or disable contexts at runtime.

  • Seamless Integration with the AI Chat Control
    The WinForms AI Chat Control discovers and merges tools from all registered contexts and manages tool selection, target resolution, parameter binding, and invocation.

Documentation

 

#Display Tool Information

You can display information about invoked tools in chat responses. Enable the AI Chat Control's IncludeFunctionCallInfo option to include metadata about invoked tools/functions (function names and arguments) in response messages.

Display Tool Information - WinForms AI Chat Control, DevExpress

A new MessageReceived event is triggered when the AI Chat Control receives a response from an AI service. Handle this event to inspect or modify metadata about invoked tools/functions before they are displayed in the chat UI.

The following code snippet removes internal function calls and arguments that are not intended for user display:

  • C#
void AiChatControl1_MessageReceived(object sender, AIChatControlMessageReceivedEventArgs e) {
    if (e.Message.FunctionCalls.Count > 0) {
        // Remove information about the GetToolTargets function used internally by the LLM to select a tool target.
        if (e.Message.FunctionCalls.RemoveAll(fcall => fcall.Request.Name == "GetToolTargets") > 0) {
            e.Message.FunctionCalls.ForEach(fcall => {
                foreach (var argument in fcall.Request.Arguments.Keys.ToList())
                    // Remove internal '*_identifier' arguments from function calls.
                    // These arguments specify target selection information and are not intended for user display.
                    if (argument.EndsWith("_identifier"))
                        fcall.Request.Arguments.Remove(argument);
            });
        }
    }
}
 

#Message Templates

You can create Razor-based templates for messages, prompt suggestions, and empty chat area to customize the DevExpress WinForms Chat UI.

Message Templates - WinForms AI Chat Control, DevExpress

Documentation

 

#Title and Clear Chat Button

Our WinForms AI Chat Control can display a header. The header contains a customizable chat title and a "Clear Chat" button (removes all messages from the conversation history except system messages).

Title and Clear Chat Button - WinForms AI Chat Control, DevExpress

To display the chat header, enable the AIChatControl.ShowHeader option. The AIChatControl.HeaderText property specifies the chat title.

 

#Resize Input Area

Enable the new AIChatControl.AllowResizeInput option to allow users resize the input area. Users can drag the top edge to enlarge the input area or down to display a more detailed chat history.

Resize Input Area - WinForms AI Chat Control, DevExpress

 

#Send Prompt Suggestion on Click

The AI Chat Control automatically inserts the selected prompt suggestion into the chat prompt box so users can edit it before sending. Activate the new PromptSuggestion.SendOnClick option to send a prompt suggestion to an AI service immediately after it is clicked and accelerate conversation flows.

 

#Chat Project Templates — DevExpress Template Kit

The DevExpress Template Kit includes new chat-based project templates for apps targeting .NET 8+.

 

AI Chat Application

Creates a WinForms chat app that integrates the AI Chat Control. Optionally integrates the DevExpress MCP Server for DevExpress-specific technical guidance (adds an mcp.json configuration file to the application).

 

AI Chat (RAG) Application

Creates a desktop WinForms application with the AI Chat Control and built-in Retrieval-Augmented Generation (RAG) for document-grounded conversations:

  • Uses local document data for context-aware answers.
  • Scans the user's Documents folder and indexes PDF, DOCX, TXT, RTF, and HTML files.
  • Extracts, embeds, and semantically searches document text.
  • Stores vectors in In-Memory (rebuilds each run) or SQLite (persistent database).
  • Merges retrieved content with user prompts to improve accuracy.
  • Optionally integrates the DevExpress MCP Server for DevExpress-specific technical guidance.
 

Chat Project Templates - WinForms AI Chat Control, DevExpress

Documentation

 

AI-powered Extensions

#Prompt to Expression

We added AI-powered expression generation to our WinForms controls to help users create filter and unbound column expressions for data-aware WinForms controls using natural language prompts. Instead of writing complex expressions, users describe the desired logic in plain text.

Prompt to Expression - WinForms Data Grid, DevExpress

The system sends the prompt to the configured AI service, which generates an expression for the control. The DevExpress Expression Editor or Filter Editor displays and validates the result immediately.

Supported controls:

  • Data Grid
  • TreeList
  • Vertical Grid

See the following animation to see how Prompt to Expression works:

Prompt to Expression - WinForms AI-powered Extensions, DevExpress

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

#SmartPaste in WinForms Scheduler Control

The DevExpress WinForms Scheduler Control supports AI-powered SmartPaste. Users can create appointments by pasting text or images from the clipboard. SmartPaste identifies the subject, date, time, location, agenda, and fills appointment fields.

SmartPaste can also detect:

  • Recurrence (for example, every Monday at 10 AM until December)
  • Time Zone
  • Label
  • Status
  • Resources
 

SmartPaste - WinForms Scheduler Control, DevExpress

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.

Activation steps:

 

#SmartPaste — AI-powered Image Processing

v25.2 extends SmartPaste to process clipboard images. Enable the ProcessClipboardImage option to extract structured data from images:

  • C#
behaviorManager1.Attach<SmartPasteBehavior>(gridView, behavior => { 
    behavior.Properties.ItemDescriptions.AddRange(new List<AIItemDescription>() { 
        new AIItemDescription(gridView.Columns["ProductName"], "Official name or product name."), 
        new AIItemDescription(gridView.Columns["Warranty"], "Information related to the product warranty (in years or months).") 
    }); 
    behavior.Properties.ProcessClipboardImage = DevExpress.Utils.DefaultBoolean.True; 
});
To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

#Prompt Augmentation

DevExpress AI Assistant and SmartPaste extensions support Prompt Augmentation. Use the AI-powered behavior's PromptAugmentation property to supply additional instructions that modify the default prompt (for example, always translate results into English):

  • C#
behaviorManager1.Attach<ChangeStyleBehavior>(memoEdit1, behavior => { 
    behavior.Properties.Temperature = 0.6f; 
    behavior.Properties.PromptAugmentation = "Always translate the result into English."; 
});

Documentation

 

#Flexible Text Selection for AI-powered Features

AI-powered text processing features rely on relevant and contextually complete input to generate high-quality results. In earlier versions, users could only send explicitly selected text to the AI service, which limited flexibility and often required extra manual steps.

The new Flexible Text Selection option in MemoEdit, RichEditControl, and SpreadsheetControl offers configurable text retrieval settings.

Use the TextRetrievalMode property to specify the portion of text that is transmitted to an AI service: selected text, current paragraph, entire document, or entire document if nothing is selected.

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

Outlook-inspired Side Panel

The DevExpress WinForms Ribbon Form can display a side navigation or status panel (Microsoft Outlook inspired).

 

Outlook-inspired Side Panel - WinForms Ribbon Control, DevExpress

 

You can use the following DevExpress WinForms controls as a side panel to create intuitive, organized interfaces similar to Microsoft Outlook:

  • PanelControl
  • AccordionControl
  • NavigationPane
  • WindowsUIButtonPanel
  • ToolboxControl
  • SidePanel

Use the RibbonForm.SidePane property to display a control on the right side of the Ribbon UI.

  • C#
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraEditors;

public partial class MainForm : RibbonForm {
    PanelControl panel;

    public MainForm() {
        InitializeComponent();

        // Create the panel.
        panel = new PanelControl();
        this.Controls.Add(panel);

        // Assign the panel to the 'RibbonForm.SidePane' property.
        this.SidePane = panel;
    }
}
To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

Data Grid & TreeList

#Multi-Cell Editing

Our WinForms Data Grid and TreeList controls ship with multi-cell editing support (users can apply identical values to multiple cells simultaneously). This capability will be useful when working with large datasets or when applying the same change (for example, updating a status, category, or date) across multiple rows.

Multi-Cell Editing - WinForms Data Grid and TreeList, DevExpress

Activation steps:

  • Set the OptionsSelection.MultiSelect property to true.
  • Attach MultiCellEditBehavior to the target control.

    • C#
    using DevExpress.XtraEditors;
    public class Form1 : XtraForm {
        BehaviorManager bm;
        
        public Form1() {
            InitializeComponent();
            // Activate multi-cell selection.
            gridView1.OptionsSelection.MultiSelect = true;
            // Create and attach a MultiCellEditBehavior.
            bm = new BehaviorManager(this.components);
            bm.Attach<MultiCellEditBehavior>(gridView1);
        }
    }
    
To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

Accordion Control

#Search with a Delay

You can filter WinForms Accordion Control items with a delay. Use the FilterDelay property to specify the delay in milliseconds.

 

SVG Icon Colorization

#CSS Variables

You can now dynamically align SVG icon colors with the current application skin. Use the following CSS variables to colorize custom SVG icons:

  • var(--dxds-icon-color-red), var(--dxds-icon-color-alt-red)
  • var(--dxds-icon-color-green), var(--dxds-icon-color-alt-green)
  • var(--dxds-icon-color-blue), var(--dxds-icon-color-alt-blue)
  • var(--dxds-icon-color-yellow), var(--dxds-icon-color-alt-yellow)
  • var(--dxds-icon-color-black), var(--dxds-icon-color-alt-black)
  • var(--dxds-icon-color-white), var(--dxds-icon-color-alt-white)
  • var(--dxds-icon-color-purple), var(--dxds-icon-color-alt-purple)

CSS Variables - SVG Icon Colorization, DevExpress

  • XML
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="New" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     viewBox="0 0 32 32" style="enable-background:new 0 0 32 32;" xml:space="preserve">
<g id="Add">
    <circle cx="16" cy="16" r="14"
         style="fill: var(--dxds-icon-color-green)"/>
    <polygon points="24,14 18,14 18,8 14,8 14,14 8,14 8,18 14,18 14,24 18,24 18,18 24,18"
         style="fill: var(--dxds-icon-color-white)"/>
</g>
</svg>
 

Rich Text Editor

#Mail Merge Enhancements — Merge Data with Detail Regions

The mail merge engine used within the DevExpress WinForms Rich Text Editor supports nested regions. You can merge data with any number of hierarchical levels (master–detail–subdetail and beyond) within a single template. Existing MailMerge methods work for both single-level and multi-level documents, no additional settings/toggles required.

Use TableStart:RegionName and TableEnd:RegionName merge fields to mark regions that contain data from a single record (master or detail). Merge regions can be defined within paragraphs or tables. Regions placed in tables automatically expand the table with source data during the merge.

Additional Mail Merge and Field API enhancements:

  • Support for major data source types: IList, IList<T>, ArrayList, DataTable, DataSet.
  • Added options to define and process custom region tags (instead of default TableStart / TableEnd).
  • Added a new GetRegionHierarchy method to get document region hierarchy. Use it to determine parent and nested regions, obtain region names and ranges, retrieve region fields.
  • Added the IsMergeField flag determining Merge Fields.
  • Introduced the MergeField interface to obtain merge field name and settings.
  • Enhanced mail merge-related events with region information arguments.

The following code snippet merges data and handles the MailMergeRecordStarted event to log the merge process:

  • C#
// Read JSON data to a database object
string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nwind_data.json");
string json = File.ReadAllText(dataPath);
NWind? nwind;
nwind = JsonSerializer.Deserialize<NWind>(json);

// Load the template into the RichEdiControl instance.
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "template.docx");
richEditControl.LoadDocument(templatePath);

// Create mail merge options.
MailMergeOptions myMergeOptions = richEditControl.Document.CreateMailMergeOptions();

// Assign the data source.
myMergeOptions.DataSource = nwind?.Customers;

// Register event handlers to customize merge behavior (progress output and dynamic variables).
richEditControl.MailMergeRecordStarted += RichEditControl_OnMailMergeRecordStarted;

// Execute the mail merge.
richEditControl.MailMerge(myMergeOptions, "result.docx", DocumentFormat.Docx);


// Event handler outputs diagnostic info for each mail merge region
// and its sub‑regions when a record merge starts.
void RichEditControl_OnMailMergeRecordStarted(object sender, MailMergeRecordStartedEventArgs e)
{
    var region = e.MailMergeRegionInfo;
    if (region != null)
    {
        Console.WriteLine($"Merging region: {region.Name}\r\n Merge Fields: {region.MergeFields.Count}");
        if (region.Regions != null && region.Regions.Count > 0)
        {

            foreach (var subRegion in region.Regions)
            {
                Console.WriteLine($" Sub-region: {subRegion.Name}\r\n Merge Fields: {subRegion.MergeFields.Count}");
            }
            Console.ReadKey();
        }
    }
}
 

Spreadsheet Control

#Extended OLE Object Support

DevExpress WinForms Spreadsheet allows you to import/export linked and embedded OLE Objects in binary Excel formats (XLS and XLSB). You can create, edit, or remove OLE objects in Excel documents and save these document to binary formats without content loss.

 

WPF Controls v25.2

.NET 10 and Visual Studio 2026 Support

DevExpress WPF component libraries now support .NET 10 and Visual Studio 2026.

 

DevExpress Template Kit

#New Item Templates

The DevExpress Template Kit v25.2 includes over 40 item templates for WPF projects, including:

  • Kanban View
  • Interactive Charts
  • Master-detail Data Grid Presentations
  • Pre-designed Edit Forms
  • Infrastructure for MVVM and Dependency Injection (DI)
  • Pre-configured BI Dashboards
  • Document Processing (Mail Merge, Import to Excel, Word to PDF Conversion, and more…)

Kanban Board Item Template - DevExpress Template Kit for WPF, DevExpress

 

#Project Templates for JetBrains Rider

The DevExpress Template Kit is fully integrated into JetBrains Rider. You can create new projects using the same rich set of DevExpress templates available in Visual Studio and VS Code.

 

Accessibility Enhancements

#Keyboard Navigation

Filter Editor and Filter Panel

Core WPF Data Grid functionality (including filtering, sorting, and column management) is now fully accessible using the keyboard. Users can navigate, modify, and delete filter nodes in the Grid’s Filter Panel and Filter Editor. When a filter node is focused, the screen reader announces its value and state.

Property NameDescription
AllowFilterPanelNavigation When activated, users can navigate between the Grid's View and the Filter Panel using the keyboard.
 

Step Progress Bar

Users can now navigate between StepProgressBar items and activate them using the keyboard.

Keyboard ShortcutAction
Tab Moves focus between views on a page.
Navigates between StepProgressBar items.
Space, Enter Activates the focused item.
 

Color Editor

Users can now navigate ColorEdit UI elements and select colors using the keyboard.

 

Cycle Through Nested Ribbons

With this updated, WPF Ribbon Controls nested within document panels are fully accessible using the keyboard. Pressing the Alt key cycles focus through all Ribbon controls in the View.

 

Ribbon Gallery

Users can now navigate to the Ribbon Gallery and open it using the Enter key. Screen readers accurately announce gallery item information and state.

 

#Row and Cell Narrator Text Customization

Our WPF Data Grid, TreeList, and TreeView controls allow you to customize narrator text for rows, cells, and nodes. You can specify the information screen readers announce when users navigate through data elements.

You can handle the new AutomationRequested attached event to override default narrator text for focused rows or cells. This event is useful when default automation text may not fully reflect displayed content (for example, when row-based navigation is enabled or when custom row or detail templates are used).

  • XAML
  • C#
<dxg:GridControl ItemsSource="{Binding Items}">
    <dxg:GridControl.View>
        <dxg:TableView
            x:Name="tableView"
            NavigationStyle="Row"
            dxg:GridAutomationHelper.AutomationRequested="OnAutomationRequested"/>
    </dxg:GridControl.View>
</dxg:GridControl>
using DevExpress.Xpf.Grid;
using DevExpress.Xpf.Grid.Automation;

void OnAutomationRequested(object sender, AutomationEventArgs e) {
    if (e is RowAutomationEventArgs rowArgs) {
        var grid = rowArgs.DataControl as GridControl;
        var view = grid?.View as TableView;
        if (view == null)
            return;

        // Skip 'special' rows.
        if (rowArgs.RowHandle == DataControlBase.NewItemRowHandle ||
            rowArgs.RowHandle == DataControlBase.InvalidRowHandle)
            return;

        // "Header1 Value1, Header2 Value2, ..."
        var parts = view.VisibleColumns.Select(c => {
            var header = c.HeaderCaption ?? c.FieldName;
            var value  = view.GetCellValue(rowArgs.RowHandle, c);
            return $"{header} {value}";
        });

        e.AutomationValue = string.Join(", ", parts);
    }
}
 

#Rich Text Editor — Accessibility Enhancements

  • Screen Reader Support for Word Documents
    Rich Text Editor documents are now accessible to screen readers (Narrator, NVDA). You can navigate through document paragraphs, lines, words, and characters. Readers can pronounce all document sections — main text, headers, footers, text boxes, image alt text.

  • Accessible Dialogs
    We improved screen reader support and keyboard navigation in Rich Text Editor dialogs. Screen readers now announce all labels and editor values in major dialogs, and users can navigate between dialog controls using the keyboard.

 

#TreeList — Level Announcement

The WPF TreeList can announce the hierarchical level of the currently focused node. This enhancement allows screen reader users to better perceive the structure of hierarchical data and navigate the tree more efficiently (ensures full compliance with WCAG 2.2 Success Criterion 1.3.1).

 

AI Chat Control Enhancements

#Manage Multiple Chat Clients

The DevExpress WPF AI Chat Control supports use of multiple AI services within a single application. You can place multiple AI Chat Controls on the same form (for example, to test model quality or host specialized agents) or use a single AI Chat Control and switch between AI providers at runtime.

Manage Multiple Chat Clients in WPF AI Chat Control, DevExpress

Documentation

 

#Resources

Our WPF AI Chat Control can now access external data sources (such as MCP (Model Context Protocol) servers) or dynamically generated content through resources. After you assign resources the AI Chat Control displays the "Attach Context" (+) button. Users can select one or more resources to include in the chat request (plain text, PDF, image). A built-in search box helps users quickly locate desired items when the resource list is long.

Resources - WPF AI Chat Control, DevExpress

You can also customize resource appearance. Use the AIChatControl.ResourceItemTemplate property to supply a Razor-based template for resource items displayed in the chat's "Attach Context" dropdown.

Customize Resource Appearance - WPF AI Chat Control, DevExpress

  • C#
using DevExpress.AIIntegration.Blazor.Chat;
using Microsoft.AspNetCore.Components;

//...
RenderFragment<AIChatResource> ResourceTemplate;

public MainWindow() {
    InitializeComponent();
    aiChatControl.ChatResources = Resources;

    ResourceTemplate = resource => builder => {
        builder.OpenComponent<Resource>(0);
        builder.AddAttribute(1, "resource", resource);
        builder.CloseComponent();
    };

    // Assign a Razor-based template.
    aiChatControl.ResourceItemTemplate = ResourceTemplate;
}

Documentation

 

#Tool Calling API

AI Tool Calling connects your WPF application logic with natural language input. The WPF AI Chat Control can invoke methods annotated with metadata that describes purpose, input parameters, and optional target objects.

Tool Calling - WPF AI Chat Control, DevExpress

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.

Attach the AIToolsBehavior to a target control to enable AI tools defined in the specified type. The AIToolsBehavior automatically manages the lifecycle of the tool context:

  • Creates and registers the context when the control is initialized.
  • Disposes the context when the control is unloaded.
  • XAML
<dxg:GridControl x:Name="gridControl">
    <dxmvvm:Interaction.Behaviors>
        <dxai:AIToolsBehavior
            ToolType="{x:Type local:GridTools}"
            TargetDescription="The grid control that displays contact information." />
    </dxmvvm:Interaction.Behaviors>
</dxg:GridControl>

A tool method must meet the following conditions to be discoverable:

  • The method must have the AIIntegrationTool attribute with a unique identifier.
  • The method must be public and static.

Documentation

 

#Display Tool Information

You can display information about invoked tools in chat responses. Enable the AI Chat Control's IncludeFunctionCallInfo option to include metadata about invoked tools/functions (function names and arguments) in response messages.

Display Tool Information - WPF AI Chat Control, DevExpress

 

#Message Templates

You can create Razor-based templates for messages and the empty chat area to customize the chat UI:

  • AIChatControl.MessageTemplate
  • AIChatControl.MessageContentTemplate
  • AIChatControl.EmptyStateTemplate

Message Templates - WPF AI Chat Control, DevExpress

Documentation

 

#Error Message Background

Use the AIChatControl.ErrorMessageBackground property to specify the background color of error messages:

Error Message Background - WPF AI Chat Control, DevExpress

  • XAML
<dxaichat:AIChatControl x:Name="aiChatControl"
                ErrorMessageBackground="LightCoral"
                Margin="10">
</dxaichat:AIChatControl>

Documentation

 

#Title and Clear Chat Button

Our WPF AI Chat Control can display a header. The header contains a customizable chat title and a "Clear Chat" button (removes all messages from the conversation history except system messages).

Title and Clear Chat Button - WPF AI Chat Control, DevExpress

To display the chat header, enable the AIChatControl.ShowHeader option. The AIChatControl.HeaderText property specifies the chat title.

 

#Resize Input Area

Enable the new AIChatControl.AllowResizeInput option to allow users resize the input area. Users can drag the top edge to enlarge the input area or down to display a more detailed chat history.

Resize Input Area - WPF AI Chat Control, DevExpress

 

#Chat Project Templates — DevExpress Template Kit

The DevExpress Template Kit includes new chat-based project templates for apps targeting .NET 8+.

 

AI Chat Application

Creates a WPF chat app that integrates the AI Chat Control. Optionally integrates the DevExpress MCP Server for DevExpress-specific technical guidance (adds an mcp.json configuration file to the application).

Supported AI providers:

  • Azure OpenAI
  • OpenAI
  • Ollama
 

AI Chat (RAG) Application

Creates a desktop WPF application with the AI Chat Control and built-in Retrieval-Augmented Generation (RAG) for document-grounded conversations:

  • Uses local document data for context-aware answers.
  • Scans the user's Documents folder and indexes PDF, DOCX, TXT, RTF, and HTML files.
  • Extracts, embeds, and semantically searches document text.
  • Stores vectors in In-Memory (rebuilds each run) or SQLite (persistent database).
  • Merges retrieved content with user prompts to improve accuracy.
  • Optionally integrates the DevExpress MCP Server for DevExpress-specific technical guidance.
 

Chat Project Templates - WPF AI Chat Control, DevExpress

Documentation

 

AI-powered Extensions

#SmartPaste — AI-powered Image Processing

v25.2 extends SmartPaste to process clipboard images. Enable the ProcessClipboardImage option to extract structured data from images.

 

#Prompt Augmentation

DevExpress AI Assistant and SmartPaste extensions support Prompt Augmentation. Use the AI-powered behavior's PromptAugmentation property to supply additional instructions that modify the default prompt (for example, always translate results into English):

  • XAML
<dxe:TextEdit TextWrapping="Wrap" AcceptsReturn="True" VerticalContentAlignment="Top">
    <dxmvvm:Interaction.Behaviors>
        <dxai:ChangeStyleBehavior x:Name="ChangeStyle"
                        PromptAugmentation="Always translate the result into English."/>
    </dxmvvm:Interaction.Behaviors>
</dxe:TextEdit>
 

Data Grid

#Print Width for Export and Print

A new PrintWidth property allows you to specify column width (in pixels) for print and export operations. Use this property to ensure consistent column alignment across PDF, XLSX, and DOCX outputs.

  • XAML
<dxg:GridControl>
    <dxg:GridControl.Columns>
        <dxg:GridColumn FieldName="Email" Header="Email Address" PrintWidth="300"/>
        <dxg:GridColumn FieldName="Name" Header="Full Name" PrintWidth="200"/>
    </dxg:GridControl.Columns>
</dxg:GridControl>
 

#Checkbox Selector Column Positioning

New API allows you to change the position of the checkbox selector column:

Use the following properties to configure selector column position:

Property NameDescription
CheckBoxSelectorColumnPosition Specifies the general position of the checkbox selector column.
CheckBoxSelectorColumnVisibleIndex Specifies the position index of the selector column within the column header area.

Checkbox Selector Column Positioning - WPF Data Grid, DevExpress

  • XAML
<dxg:GridControl ... 
                    SelectionMode="MultipleRow">
    <dxg:GridControl.View>
        <dxg:TableView ShowCheckBoxSelectorColumn="True"
                        ShowCheckBoxSelectorInGroupRow="False"
                        CheckBoxSelectorColumnPosition="None"
                        CheckBoxSelectorColumnVisibleIndex="5"/>
    </dxg:GridControl.View>
</dxg:GridControl>
 

Available Options

ValueDescription
None Checkbox selector column position is based on the CheckBoxSelectorColumnVisibleIndex property.
Left The Checkbox selector column occupies the leftmost position within the scrollable content area.
Right The Checkbox selector column occupies the rightmost position within the scrollable content area.
FixedLeft The Checkbox selector column is fixed to the left border of the grid view.
FixedRight The Checkbox selector column is fixed to the right border of the grid view.
To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

#Prevent User Changes in Cell Editor

The WPF Data Grid ships with a new CellEditorValueChanging event and allows you to intercept and cancel cell value modifications before they are applied to the UI.

In previous versions, when users edited a cell (for example, by toggling a checkbox), the UI would immediately reflect changes, even if underlying data posting was subsequently canceled in the CellValueChanging event handler. With this update, you can prevent the cell editor value from being changed in the UI itself.

This feature is useful for confirmation dialogs in Boolean columns. For example, you can prompt the user before changing a cell's value, and if the action is canceled, the cell remains unchanged:

  • C#
void OnIsActiveCellEditorChanging(object sender, CellEditorValueChangingEventArgs e) {
    if (e.Column.FieldName == "IsActive") {
        var result = MessageBox.Show(
            "Would you like to change the Active status?",
            "Warning",
            MessageBoxButton.OKCancel,
            MessageBoxImage.Question,
            MessageBoxResult.OK
        );
        e.Cancel = (result == MessageBoxResult.Cancel);
    }
}

The CellEditorValueChanging event is also available in the WPF TreeList control.

 

Ribbon Control

#Outlook-inspired Page Header Button

Our WPF Ribbon Control can display the Page Header Button within the page header area. This button can be used to expand or collapse a navigation control, similar to behaviors found in recent versions of Microsoft Outlook.

Outlook-inspired Page Header Button - WPF Ribbon Control, DevExpress

To enable the Page Header Button:

  • Set the RibbonControl.ShowPageHeaderButton property to true.
  • Use the PageHeaderButtonCommand property to assign the associated action.

The Page Header Button is available with the following Ribbon styles:

  • Office2019
  • OfficeSlim
  • TabletOffice
 

Rich Text Editor

#Mail Merge Enhancements — Merge Data with Detail Regions

The mail merge engine used within the DevExpress WPF Rich Text Editor supports nested regions. You can merge data with any number of hierarchical levels (master–detail–subdetail and beyond) within a single template. Existing MailMerge methods work for both single-level and multi-level documents, no additional settings/toggles required.

Use TableStart:RegionName and TableEnd:RegionName merge fields to mark regions that contain data from a single record (master or detail). Merge regions can be defined within paragraphs or tables. Regions placed in tables automatically expand the table with source data during the merge.

Additional Mail Merge and Field API enhancements:

  • Support for major data source types: IList, IList<T>, ArrayList, DataTable, DataSet.
  • Added options to define and process custom region tags (instead of default TableStart / TableEnd).
  • Added a new GetRegionHierarchy method to get document region hierarchy. Use it to determine parent and nested regions, obtain region names and ranges, retrieve region fields.
  • Added the IsMergeField flag determining Merge Fields.
  • Introduced the MergeField interface to obtain merge field name and settings.
  • Enhanced mail merge-related events with region information arguments.

The following code snippet merges data and handles the MailMergeRecordStarted event to log the merge process:

  • C#
// Read JSON data to a database object
string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nwind_data.json");
string json = File.ReadAllText(dataPath);
NWind? nwind;
nwind = JsonSerializer.Deserialize<NWind>(json);

// Load the template into the RichEditControl instance.
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "template.docx");
richEditControl.LoadDocument(templatePath);

// Create mail merge options.
MailMergeOptions myMergeOptions = richEditControl.Document.CreateMailMergeOptions();

// Assign the data source.
myMergeOptions.DataSource = nwind?.Customers;

// Register event handlers to customize merge behavior (progress output and dynamic variables).
richEditControl.MailMergeRecordStarted += RichEditControl_OnMailMergeRecordStarted;

// Execute the mail merge.
richEditControl.MailMerge(myMergeOptions, "result.docx", DocumentFormat.Docx);


// Event handler outputs diagnostic info for each mail merge region
// and its sub‑regions when a record merge starts.
void RichEditControl_OnMailMergeRecordStarted(object sender, MailMergeRecordStartedEventArgs e)
{
    var region = e.MailMergeRegionInfo;
    if (region != null)
    {
        Console.WriteLine($"Merging region: {region.Name}\r\n Merge Fields: {region.MergeFields.Count}");
        if (region.Regions != null && region.Regions.Count > 0)
        {

            foreach (var subRegion in region.Regions)
            {
                Console.WriteLine($" Sub-region: {subRegion.Name}\r\n Merge Fields: {subRegion.MergeFields.Count}");
            }
            Console.ReadKey();
        }
    }
}
 

Spreadsheet Control

#Extended OLE Object Support

DevExpress WPF Spreadsheet Control library allows you to import/export linked and embedded OLE Objects in binary Excel formats (XLS and XLSB). You can create, edit, or remove OLE objects in Excel documents and save these document to binary formats without content loss.

 

JavaScript & ASP.NET Core Components v25.2

AI-Powered Extensions

#DataGrid/TreeList — AI Columns

v25.2 adds AI Columns support to our DataGrid and TreeList components. AI columns generate meaningful, context-based cell values based on component data and a custom prompt. This feature transforms DevExtreme DataGrid and TreeList components into AI-augmented data exploration tools.

AI columns are perfect for the following scenarios:

  • Record categorization: Automatically classify and categorize your data into groups by type, priority, origin, and more.
  • AI summaries and insights: Ask AI to summarize information, detect trends, and generate sentiment analyses.
  • Transformation and translation: Translate text into multiple languages and transform information to a different format (such as a different address format).
  • Recommendations and guidance: Ask AI for recommendations and best practices for your specific set of records.
 DevExtreme DataGrid AI Column prompt editing 

You can define one or multiple AI Columns in your DataGrid/TreeList to expand the scope of generated insights. AI Columns fully support standard column functionality such as reordering, fixing, resizing, and hiding.

AI columns support two generation modes: auto and manual. In auto mode (default), DataGrid/TreeList generates AI column data each time the data view is updated. In manual mode, users can generate data when needed (helps you control AI token and credit usage). To select a generation mode, specify the new columns[].ai.mode property.

In headers, AI columns display an additional AI menu button. AI drop-down menus include the following elements:

  • Prompt Editor: Opens a popup where users can enter/modify the AI prompt and immediately modify how column data is generated.
  • Regenerate Data Button: Based on generation mode, generates or refreshes AI values for all visible cells. The button also allows users to reapply the current prompt or fill missing column values (for instance, after adding new rows).
  • Clear Data Button: Removes all AI-generated column values.

You can define an initial prompt for each AI column and customize core AI options (such as the LLM model). Moreover, you can configure Popup and TextBox components used in the prompt editor to better address specific needs.

Note: DataGrid/Treelist generate AI column data dynamically for the current view. These values are not saved to the component data source and are excluded from standard sorting and filtering operations.

Online Demo

 

#Form — AI Smart Paste

DevExtreme Form ships with AI-powered Smart Paste functionality. When a user copies unstructured text (from spreadsheets, documents, emails, web pages, etc.) and activates Smart Paste, AI analyzes clipboard content and populates each form field with relevant data.

This capability helps automate data entry, create CRM records, submit support tickets, and complete survey forms (especially useful when copying information from existing text or documents).

DevExtreme Form Smart Paste

Use the following APIs to enable Smart Paste in our Form component:

  • aiIntegration: Contains AI Service settings.
  • smartPaste: Adds a built-in Smart Paste button to the Form. To initiate this functionality in code, call the smartPaste(text) method. For additional information about predefined Form buttons, refer to the following section: Form - New Predefined Buttons.
  • Angular
  • React
  • Vue
  • jQuery
<dx-form>
    <dxi-form-item
        itemType="button"
        name="smartPaste"
    >
    </dxi-form-item>
</dx-form>
function App() { 
    return ( 
        <Form>
            <ButtonItem name="smartPaste" />
        </Form>
    ); 
}
<template> 
    <DxForm>
        <DxButtonItem name="smartPaste" />
    </DxForm>
</template>
$('#form').dxForm({
    items: [{
        itemType: 'button',
        name: 'smartPaste',
    }],
});

You can configure the general Smart Paste prompt to modify parsing used for your task.

You can also configure each Form field using aiOptions:

  • disabled: Prevents Smart Paste from filling this form item.
  • instruction: Adds custom instructions for the AI to improve accuracy and relevance. Specify format, value limits, or other requirements.
 

#DevExpress MCP Server for AI-Powered Documentation Access

During our v25.2 cycle, we released the DevExpress documentation MCP server. This is a resource that helps AI assistants access information about DevExpress products (including DevExtreme components) more directly. Our MCP server allows you to integrate DevExtreme into your AI-powered workflows and obtain higher-quality results.

Once you configure the DevExpress MCP server in your IDE, an MCP-compatible AI tool in Agent mode can help you with the following:

  • Generate and debug DevExtreme component code.
  • Configure and customize DevExtreme components.
  • Get answers to your DevExpress-related questions.
  • Generate code that implements scenarios described in DevExpress documentation.
DevExpress MCP Server

To get the most out of our MCP server:

  • Ensure prompt specificity: Include the name of DevExtreme components and framework your app uses. For instance, start prompts as follows: "I'm working with the DevExtreme DataGrid in Angular".
  • Include as much detail as possible: Add relevant project details to your prompts (such as file names or structures). This allows your AI assistant to make more specific MCP queries and generate more accurate results.

To get started with the DevExpress MCP server, refer to the following blog post: DevExpress Documentation MCP Server: Configure an AI-powered Assistant.

 

New SpeechToText Component

DevExtreme v25.2 ships with a new SpeechToText UI component. This component converts voice input to text in real-time. Use SpeechToText to enhance accessibility, improve user-efficiency, and support new interaction scenarios (such as hands-free voice input). You can use SpeechToText together with any text-based input, including DevExtreme TextArea and HTML Editor components. Moreover, you can integrate SpeechToText inside our Form using item templates.

Our SpeechToText component is ideal for the following usage scenarios:

  • Forms and data entry: Simplify input on desktops, tablets, and mobile devices.
  • AI assistants: Connect SpeechToText to multimodal AI assistants and allow users to speak context-rich prompts (instead of typing).
  • Search bars: Enable instant voice search.
DevExtreme SpeechToText Component

Our SpeechToText component implements the Web Speech API SpeechRecognition interface. The interface is supported across major browsers/devices and recognizes multiple languages (English, Spanish, Portuguese, Hindi, and more). You can customize SpeechToText behavior using the following SpeechRecognition options:

  • continuous: Activates continuous transcription mode, where recognition continues after speech ends and stops only when users click the finish button.
  • grammars: Allows you to guide speech recognition toward specific words or phrases (unique product names, technical terminology, or user-specific vocabulary).
  • interimResults: Returns recognized text as users speak (in addition to final results).
  • lang: Allows you to specify the recognition language instead of detecting it automatically.
  • maxAlternatives: The number of result alternatives to generate. Alternative results help you to detect certain words/phrases more frequently.

In addition to the Web Speech API, SpeechToText supports custom speech recognizers, including AI-powered transcription services.

DevExtreme SpeechToText Component

You can also customize component appearance in both initial and "listening" states using the component icon (startIcon/stopIcon) and text (startText/stopText) properties. You can configure SpeechToText to display only an icon, or both icon and text.

Chat-Related Enhancements

#File Attachments

With v25.2, users can attach images, documents, and other files when sending messages through DevExtreme Chat.

File attachments address a variety of usage scenarios, including:

  • Customer support: Share screenshots, logs, or reports to resolve issues faster.
  • Team collaboration: Exchange documents, images, or notes during discussions.
  • AI-assisted chats: Upload documents or images for contextual analysis and smarter AI responses.
DevExtreme Chat File Attachments feature

We redesigned the message input area with a modern, simplified layout. All action buttons (including the new Attach button) are now displayed inside the input field.

DevExtreme Chat message box that contains attached files

The Attach button automatically appears once fileUploaderOptions are specified. Available validation options include:

Previews of uploaded files are displayed in the message box with basic info, upload status, and an icon that corresponds to the file type. Users can review uploaded files and remove unnecessary files before sending.

Once sent, attachments are displayed within message bubbles. Attachment details (name, size) are sent to onMessageEntered along with the message data. Add attachments to the data source at this stage. Include an "attachments" field in the message object to display files in the message bubbles. The Chat component does not update the data source automatically when adding file attachments to a message - you can decide how and when to save files.

Each file displays a Download button when you implement the onAttachmentDownloadClick event, allowing you to handle the download logic.

DevExtreme Chat message bubbles that contain attached files

Attachment layout within a message is fully responsive - adapting automatically to different screen sizes and message lengths.

Online Demo 

#Empty View Template

You can now customize the empty view in the DevExtreme Chat component. This container appears when there are no messages in our Chat. Tailor the new chat experience with custom markup (text, visuals, or interactive elements) to create a more personalized first impression for users.

DevExtreme Chat that implements a custom empty view template

Empty view customization is an invaluable capability for multiple usage scenarios:

  • AI assistants: Integrate DevExtreme TileView within our Chat component and display predefined prompt options. These prompts allow users to start guided conversations much like popular AI chat tools (such as Microsoft Copilot).
  • Instructions and preliminary info: Display important information before a conversation begins - such as usage instructions or data processing disclaimers.
  • Branded experiences: Add brand visuals, mascots, or tone to engage users.
  • Context-aware predefined messages: Display dynamic content based on user context (for instance, "Ask me anything about your current order") for a more personalized experience.

To display custom markup in new chats, implement the emptyViewTemplate property (emptyViewRender/emptyViewComponent in React).

 

Scheduler Enhancements

#Appointment Form Redesign

We redesigned the DevExtreme Scheduler's Appointment Edit Form to align with modern UI/UX standards. The new design ensures consistency across Scheduler visual elements in all our supported themes. The new Appointment Edit Form is fully responsive (across desktops, tablets, and mobile devices).

DevExtreme Scheduler appointment edit form, v25.1DevExtreme Scheduler appointment edit form, v25.2

The new design separates recurrence settings from general appointment details and makes the form easier to navigate. This separation helps users focus on essential information first and edit recurrence options only when needed.

Visual enhancements include new built-in icons. You can also use the new resources[].icon property to define custom icons for resource fields. Configure editing.form.iconsShowMode to change icon visibility.

 

#Appointment Form Customization

You can customize the new Appointment Edit Form in DevExtreme Scheduler in the following ways:

  • Specify appointment fields that users can edit.
  • Rearrange and hide individual appointment fields.
  • Move fields between recurrence and general information forms.
  • Customize icon visibility.
  • Add custom fields and save additional appointment details to the Scheduler data source.
  • Customize individual form items (using the Form's customizeItem property or itemOption method).
DevExtreme Scheduler appointment edit form customization

The following code snippet defines a custom items array to display four fields in the main group of the Appointment Edit Form:

  • Angular
  • React
  • Vue
  • jQuery
<dx-scheduler>
    <dxo-scheduler-editing>
        <dxo-editing-form>
            <dxi-form-item name="mainGroup" itemType="group">
                <dxi-form-item name="subjectEditor"></dxi-form-item>
                <dxi-form-item name="dateGroup"></dxi-form-item>
                <dxi-form-item name="allDayGroup"></dxi-form-item>
                <dxi-form-item name="repeatGroup"></dxi-form-item>
            </dxi-form-item>
        </dxo-editing-form>
    </dxo-scheduler-editing>
</dx-scheduler>
function App() { 
    return ( 
        <Scheduler>
            <Editing>
                <Form>
                    <Item name="mainGroup" itemType="group">
                        <Item name="subjectEditor"/>
                        <Item name="dateGroup"/>
                        <Item name="allDayGroup"/>
                        <Item name="repeatGroup"/>
                    </Item>
                </Form>
            </Editing>
        </Scheduler>
    ); 
}
<template> 
    <DxScheduler>
        <DxEditing>
            <DxForm>
                <DxItem name="mainGroup" itemType="group">
                    <DxItem name="subjectEditor" />
                    <DxItem name="dateGroup" />
                    <DxItem name="allDayGroup" />
                    <DxItem name="repeatGroup" />
                </DxItem>
            </DxForm>
        </DxEditing>
    </DxScheduler>
</template>
$('#scheduler-container').dxScheduler({
    editing: {
        form: {
            items: [{
                name: 'mainGroup',
                itemType: 'group',
                items: ['subjectEditor', 'dateGroup', 'allDayGroup', 'repeatGroup],
            }]
        },
    },
});

DevExtreme Scheduler also allows you to customize Popup and Form components used in the Appointment Edit Form. You can customize the Popup position/dimensions and configure Form validation options. You can even combine recurrence and general settings into a single form and restore the outgoing flow (while keeping the new visual style).

New onSaved/onCanceled events allow you to save or process appointment information after users save/cancel their changes. Use these events to implement custom appointment templates with banner images and save new/updated images directly to the Scheduler data source.

Online Demo

 

UI/UX and API Enhancements

#Collection Components — Performance Optimizations

We enhanced reordering behavior for Accordion, Tabs, TabPanel, and List UI components. If the repaintChangesOnly option is true, re-rendering is limited to affected items only.

This change increases rendering speed and reduces DOM updates, especially in large collections.

 

#Drop-Down Editors — New fieldAddons API

For SelectBox, TagBox, ColorBox, and DropDownBox, we replaced fieldTemplate with the new fieldAddons object. This property allows you to customize the appearance and functionality of our drop-down editors without recreating input logic (no need to define full TextBox component configuration). The fieldTemplate property is deprecated.

DevExtreme SelectBox that implements the new filed addons API

Use fieldAddons.beforeTemplate and fieldAddons.afterTemplate properties to specify custom markup before/after the input element. Usage scenarios include:

  • Inline action buttons: Integrate buttons to add, delete, or modify drop-down items, or to execute custom actions.
  • Status icons and labels: Display important information such as status states, icons, and labels, and update them as selection changes (if required).
  • Branding elements: Add brand visuals or mascots.
 

#Form — New Predefined Buttons

The DevExtreme Form component includes new predefined button items (identified by 'name'):

  • reset: Resets all values in the Form to their initial state.
  • submit: Submits the form.
  • smartPaste: Populates the Form with AI-generated values based on clipboard text. Requires aiIntegration. For more information in this regard, please review Form - AI Smart Paste section of this page.
DevExtreme SelectBox that implements the new filed addons API

These buttons share a consistent design and trigger actions automatically. Add them to your Form as follows:

  • Angular
  • React
  • Vue
  • jQuery
<dx-form [colCount]="2">
    <dxi-form-item
        itemType="button"
        name="smartPaste"
        horizontalAlignment="left"
    ></dxi-form-item>
    <dxi-form-item
        itemType="group"
        [colCount]="2"
        cssClass="buttons-right"
    >
        <dxi-form-item
            itemType="button"
            name="submit"
        ></dxi-form-item>
        <dxi-form-item
            itemType="button"
            name="reset"
        ></dxi-form-item>
    </dxi-form-item>
</dx-form>
function App() { 
    return ( 
        <Form colCount={2}>
            <ButtonItem
                name="smartPaste"
                horizontalAlignment="left"
            />
            <GroupItem
                colCount={2}
                cssClass="buttons-right"
            >
                <ButtonItem name="submit" />
                <ButtonItem name="reset" />
            </GroupItem>
        </Form>
    ); 
}
<template> 
    <DxForm :col-count="2">
        <DxButtonItem
            name="smartPaste"
            horizontal-alignment="left"
        />
        <DxGroupItem
            :col-count="2"
            css-class="buttons-right"
        >
            <DxButtonItem name="submit" />
            <DxButtonItem name="reset" />
        </DxGroupItem>
    </DxForm>
</template>
$('#form').dxForm({
    colCount: 2,
    items: [{
        itemType: 'button',
        name: 'smartPaste',
        horizontalAlignment: 'left',
    }, {
        itemType: 'group',
        colCount: 2,
        cssClass: 'buttons-right',
        items: [{
            itemType: 'button', name: 'submit'
        }, {
            itemType: 'button', name: 'reset'
        }],
    }],
});
 

#LoadIndicator — New Animation Type

With v25.2, the LoadIndicator component now supports sparkle animation. This new animationType option allows you to switch between circle and sparkle animation.

DevExtreme LoadIndicator animation types side by side

The sparkle animation type addresses AI-powered usage scenarios (AI processing state feedback).

The new animation is also available in the DevExtreme LoadPanel (indicatorOptions.animationType) and DataGrid (loadPanel.indicatorOptions.animationType).

 

#Calendar — Today Button Text

You can now specify custom text for the Today button using the todayButtonText option.

DevExtreme Calendar that implements custom today button text
 

#TabPanel — New keyExpr Property

We introduced a new keyExpr property to the DevExtreme TabPanel component. This property defines the key used to access tab items and ensures reliable selection, efficient updates, and correct behavior with dynamic tabs.

 

Font Stack Update

We added system fonts to the base font family stack in all DevExtreme themes (Fluent, Material, Generic):

  • Fluent
  • Material
  • Generic
$base-font-family:
    segoe ui,
    -apple-system,
    blinkmacsystemfont,
    avenir next,
    avenir,
    helvetica neue,
    adwaita sans,
    cantarell,
    ubuntu,
    roboto,
    noto,
    helvetica,
    arial,
    sans-serif !default;
$base-font-family:
    roboto,
    -apple-system,
    blinkmacsystemfont,
    avenir next,
    avenir,
    segoe ui,
    helvetica neue,
    adwaita sans,
    cantarell,
    ubuntu,
    noto,
    helvetica,
    arial,
    sans-serif !default;
$base-font-family:
    -apple-system,
    blinkmacsystemfont,
    avenir next,
    avenir,
    segoe ui,
    helvetica neue,
    adwaita sans,
    cantarell,
    ubuntu,
    roboto,
    noto,
    helvetica,
    arial,
    sans-serif !default;

This change ensures consistent appearance across platforms, enhances text rendering, and improves performance.

Accessibility

DevExtreme v25.2 ships with the following accessibility enhancements:

  • Our TreeView component now supports item selection using keyboard shortcuts (shift + arrow keys/home/end) when selectionMode is "multiple" and showCheckBoxesMode is "none".
  • The Form component correctly prevents screen readers from reading item required marks (the * character).
  • Our FileUploader component's file list is now accessible to screen readers via new aria-label properties.

Angular: Automatic Migration to New Configuration Components

With v25.2, we released a new CLI command that helps you seamlessly upgrade your application to our latest Angular configuration components. Unlike the old, generic configuration components, our new components contain only relevant TypeScript types and are specific to each DevExtreme component. For additional information about our new Angular configuration components, refer to the following document: Changes and Future Plans: New Angular Configuration Components.

To get started with our new CLI tool, simply run the following command:

devextreme migrate angular-config-components

DevExtreme CLI Migrate command output

The tool detects all old configuration components in your directory and upgrades to the latest, component-specific components. You can run the command on all files within your directory (including TypeScript files if you use inline templates).

The tool also supports dry runs to preview changes and allows you to update your application manually:

devextreme migrate angular-config-components --dry

For additional migration command options, run the following command:

devextreme migrate --help

Note: Starting with v25.2, our generic configuration components throw warnings in the application console. To eliminate these warnings, upgrade your application to our named configuration components.

DevExtreme Angular generic component warning

Angular 21

Angular 21 was recently released. We've tested this version against our UI components and found no issues.

If you are considering Angular 21 for a current/upcoming project, feel free to share your Angular-specific thoughts/experiences with us

ASP.NET Core

#.NET 10 Support

DevExtreme-based ASP.NET Core controls now support .NET 10.

 

#ASP.NET Core Source Builder

Universal and DXperience Subscriptions

With v25.2, the DevExpress Source Builder now supports our DevExtreme-based ASP.NET Core controls.

 

#ASP.NET Core Rich Text Editor — Scroll API

ASP.NET and Blazor, Universal, and DXperience Subscriptions

The DevExpress ASP.NET Core Rich Text Editor allows you to scroll documents programmatically using the following methods:

  • Razor
@{
    var documentContent = System.IO.File.ReadAllBytes(@"C:\Users\Public\example.docx");
}

@(Html.DevExpress().RichEdit("richEdit")
    .Open(documentContent)
)

@(Html.DevExtreme().Button()
    .Text("First page")
    .OnClick("scrollToFirstPage")
)

@(Html.DevExtreme().Button()
    .Text("Footer")
    .OnClick("scrollToFooter")
)

<script>
    var richEdit = RichEdit.get("richEdit");

    function scrollToFirstPage() {
        richEdit.scrollToPage(0);
    }

    function scrollToFooter() {
        var section = richEdit.document.sections.getByIndex(0);
        var footer = section.getFooter();

        if (footer) {
            richEdit.scrollToPosition(0, footer);
        }
    }
</script>
 

#Web Reporting

ASP.NET and Blazor, Universal, and DXperience Subscriptions

v25.2 adds the following enhancements to DevExpress Reports for Web platforms (ASP.NET, Angular, React):

 

#BI Dashboard

Universal Subscription

With v25.2, we added the following improvements to the DevExpress BI Dashboard:

 

Blazor UI Components v25.2

.NET 10 Support

DevExpress Blazor UI components support new .NET 10 features.

 

Visual Studio 2026 Support

DevExpress Blazor UI components fully support Visual Studio 2026.

 

Content Security Policy (CSP) Enhancements

We improved Content Security Policy (CSP) support across our Blazor component suite. DevExpress Blazor components no longer require the style-src 'unsafe-inline' directive.

For additional information, refer to the following topic: Content Security Policy.

 

Project Templates

#JetBrains Rider Support

With v25.2, DevExpress Template Kit is fully integrated into JetBrains Rider. You can create new projects using the same set of DevExpress templates available in Visual Studio and VS Code.

 

#New Sample Views

To accelerate developer adoption, the DevExpress Template Kit adds sample Blazor component pages to the generated project. Each page includes minimal component configuration, resources, and sample data.

The following DevExpress components are supported:

 

Performance Enhancements

#Blazor Grid, TreeList & Pivot — Improved Performance with Many Columns

With v25.2, we extended our rendering engine with horizontal virtualization support (in addition to existing vertical virtualization). Column virtualization is now available for DevExpress Blazor Grid, TreeList, and PivotTable UI components. Use it to efficiently handle data sources with hundreds or even thousands of columns.

 

#Blazor Grid & TreeList — Improved Filter Menu Responsiveness

We optimized rendering speed and improved responsiveness for column filter menus used within our Blazor Grid and TreeList components.

Blazor Grid & TreeList — Improved Filter Menu Responsiveness 

#Blazor Ribbon & Toolbar — Faster Popup Opening

DevExpress Blazor Ribbon and Toolbar SubMenus now reuse a single popup instance that initializes on component load. This improves popup activation speed, especially over slower connections.

These optimizations also affect Blazor components that use the DevExpress Blazor Ribbon/Toolbar internally, including the DevExpress Rich Text Editor, HTML Editor, and Scheduler.

 

#Blazor Scheduler — Resize and Drag & Drop Enhancements

To help improve responsiveness, we optimized our Scheduler's resize/drag & drop engine.

The DevExpress Blazor Scheduler automatically switches to our new client-side mode unless server-side processing is required (when you use template-based appointments or handle server-side events). You can use the AppointmentDragMode property to specify appointment drag/resize operation processing (on client or server).

For client-side processing (AppointmentDragMode is Client), we added a hint that displays appointment start and end times. This change allows the Blazor Scheduler to re-render appointments on the client without server communication.

Scheduler - Time Tooltip on Drag/Resize 

#Blazor Filter Builder — Performance Optimizations

We optimized the DevExpress Blazor Filter Builder to handle large data models efficiently. It now supports up to 100,000 fields across multiple hierarchy levels with improved performance.

 

Accessibility Enhancements

  • Added support for keyboard navigation in both our Pivot Table and Ribbon component. We also improved existing keyboard navigation in our Filter Builder and TagBox.
  • Added an Alt+Del keyboard shortcut designed to clear values in the Date Edit, Date Range Picker, Memo, Search Box, Spin Edit, Text Box, and Time Edit.
  • Supported relevant accessibility attributes in our Date Edit, Form Layout, Message Box, Time Edit, and Popup components.
  • Improved screen reader support in our Calendar, Color Palette, Time Edit, TagBox, and Popup components.
  • Introduced minimum size requirement for spin buttons used in our Spin Edit component.
 

New Blazor Smart Autocomplete

We added a Smart Autocomplete option — a new AI-powered Extension designed to accelerate text input. Smart Autocomplete connects to our Blazor Memo and displays gray inline suggestions based on current input. Suggestions appear within the Blazor Memo Editor without interrupting typing flow. Users can accept a suggestion or simply continue typing to dismiss it.

Blazor Memo — AI Smart Autocomplete

The Smart Autocomplete Extension provides the following API members to help you customize associated behaviors: InputDelay, SuggestionReceived.

  • Razor
<DxMemo @bind-Text=@TextValue>
    <Extensions>
        <MemoSmartAutoComplete InputDelay="1000"
                                  SuggestionReceived="@OnSuggestionReceived" />
    </Extensions>
</DxMemo>

@code {
    string TextValue { get; set; } =
    "Taylor continues to have problems managing expectations. " +
    "She is too optimistic and refuses to be realistic about the workload involved. " +
    "I recommend";

    void OnSuggestionReceived(MemoSmartAutoCompleteSuggestionReceivedEventArgs e) {
        // Handle suggestions
    }
}
 

Blazor AI Chat

#Tool Calling API

AI tool calling connects Blazor application logic with natural language input. DevExpress Blazor AI Chat can invoke methods annotated with metadata (called AI tools) to execute any action in the UI or business logic. The AI service automatically resolves a relevant function at runtime based on chat context.

We've added an AI tool calling layer that extends capabilities found in Microsoft.Extensions.AI:

  • Target-aware tools: Tools can operate on specific object instances (UI controls, pages, data services, business objects). The API automatically resolves target objects at runtime based on context and descriptions.
  • Flexible tool contexts: Tools can be grouped into contexts that can be enabled, disabled, or removed dynamically based on application state or user workflow.
  • Seamless integration with the AI Chat Control: The DevExpress Blazor AI Chat Control discovers and merges tools from all registered contexts and manages tool selection, target resolution, parameter binding, and invocation.

The following code snippet registers DevExpress AI services, defines a contextual AI tool, and integrates an AI tool calling pipeline into an application:

  • Razor
  • AI Tools
  • Program.cs
@using DevExpress.AIIntegration.Blazor.Chat
@using DevExpress.AIIntegration.Tools
@inject AIToolsContextContainer container

<DxAIChat />
<DxGrid @ref="grid">
    <!-- ... -->
</DxGrid>

@code {
    DxGrid grid;
    AIToolsContext context;

    protected override void OnAfterRender(bool firstRender) {
        if (firstRender) {
            context = new AIToolsContextBuilder()
                .WithToolMethods(ExpandGroups)
                .Build();
            container.Add(context);
        }
    }
}
using DevExpress.AIIntegration;

/* ... */

[AIIntegrationTool("GridControl_ExpandGroups")]
[Description("Expands all group rows in the grid.")]
public static string ExpandGroups(
    [AIIntegrationToolTarget("The grid with collapsed group rows.")]
    GridControl target_grid
) {
    if (target_grid.GroupCount == 0) return "No grouped rows found.";
    target_grid.ExpandAllGroups();
    return "All groups are expanded.";
}
using Azure.AI.OpenAI;
using DevExpress.AIIntegration;
using Microsoft.Extensions.AI;

// Create Azure OpenAI client
AzureOpenAIClient azureOpenAIClient = new(
      new Uri(azureOpenAiEndpoint),
      new ApiKeyCredential(azureOpenAiKey)
);
IChatClient azureOpenAIChatClient = azureOpenAIClient.GetChatClient(azureOpenAiModel).AsIChatClient();
// Register scoped chat client with DevExpress AI tool calling
builder.Services.AddScoped((sp) => {
    return azureOpenAIChatClient.AsBuilder()
                                .UseDXTools()            // DevExpress AI tool calling
                                .UseFunctionInvocation() // Microsoft.Extensions.AI function invocation
                                .Build(sp);
});
// Register DevExpress AI services
builder.Services.AddDevExpressAI();
 

#Tool Call Visualization

DevExpress Blazor AI Chat messages now include information about all AI functions invoked in response to a user's message. Use this information to build custom message templates or use the predefined template to test/debug AI tool calling during development.

Tool Call Visualization 

#Add Resources to Chat Context

The DevExpress Blazor AI Chat component allows users to attach additional context to chat messages. Resources can include binary files (images, audio, PDFs, documents) and non-file artifacts such as database schemas, structured records, or logs. You can also supply external content retrieved from a Model Context Protocol (MCP) server as a resource.

Use the Resources collection to add or manage resources programmatically.

Resources help the AI model generate more precise answers without fine-tuning and reduce hallucinations.

 

#Clear Chat History

DevExpress Blazor AI Chat now displays a customizable chat header and a Clear Chat button (removes all messages from the conversation history, except for system messages).

  • Razor
<DxAIChat ShowHeader="true"
          HeaderText="Chat with AI Assistant" />
AI Chat Header 

#Multiple AI Chat Providers

The DevExpress Blazor AI Chat component can be bound to a specific AI service at runtime. You can allow users to select an AI model or programmatically specify the most suitable model for the current task. For instance, you can use a powerful "thinking" model for complex queries and a faster, more cost-effective model for simpler interactions.

To add multiple services, register each AI model with a unique string key:

  • C#
// Azure OpenAI client
AzureOpenAIClient azureOpenAIClient = new(
        new Uri(azureOpenAiEndpoint),
        new ApiKeyCredential(azureOpenAiKey)
);
IChatClient azureOpenAIChatClient = azureOpenAIClient.GetChatClient(azureOpenAiModel)
                                                        .AsIChatClient();
// Ollama client
IChatClient ollamaChatClient = new OllamaApiClient("http://localhost:11434", aiModel);
// Register keyed AI services
builder.Services.AddKeyedChatClient("AzureOpenAI", azureOpenAIChatClient);
builder.Services.AddKeyedChatClient("Ollama", ollamaChatClient);

Once registered, use the ChatClientServiceKey property to bind a service to our Blazor AI Chat:

  • Razor
<DxComboBox Data="chatClients"
            TextFieldName="Value"
            ValueFieldName="Key"
            @bind-Value="chatClientServiceKey" />

<DxAIChat ChatClientServiceKey="@chatClientServiceKey" />

@code {
    Dictionary<string, string> chatClients = new()
    {
        { "AzureOpenAI", "Cloud" },
        { "Ollama", "Local" }
    };
    string chatClientServiceKey = "";
    protected override void OnInitialized()
    {
        chatClientServiceKey = chatClients.First().Key;
        base.OnInitialized();
    }
}
Dynamically Switch AI Model 

#Send Prompt Suggestion on Click

DevExpress Blazor AI Chat automatically inserts a selected prompt suggestion into the chat prompt box so users can edit it before sending. Activate our new SendOnClick property to send prompt suggestions to the server immediately (once clicked) and accelerate conversation flow.

  • Razor
<DxAIChat>
    <PromptSuggestions>
        <DxAIChatPromptSuggestion Title="Tell me a joke"
                                  Text="Take a break and enjoy a quick laugh"
                                  PromptMessage="Tell me a joke about AI."
                                  SendOnClick="true" />
        <DxAIChatPromptSuggestion Title="Summarize text"
                                  Text="Extract a quick summary (main ideas)"
                                  PromptMessage="Summarize the following text:"
                                  SendOnClick="false" />
    </PromptSuggestions>
</DxAIChat>
Send Prompt Suggestion to Chat 

#Resizable Input Box

The Blazor AI Chat input box automatically resizes itself as a user types.

Enable the new AllowResizeInput property to drag the topmost edge of the chat input box: up for additional space, down to display more chat history.

  • Razor
<style>
    .my-ai-chat {
        width: 100%;
        height: 400px;
    }
</style>

<DxAIChat
    CssClass="my-ai-chat"
    AllowResizeInput="true" />
Resizable Chat Prompt 

Blazor AI Extensions

#AI Toolbar Item Text

You can now rename Blazor Rich Text Editor and HTML Editor AI toolbar items:

  • Razor
<DxRichEdit>
    <Extensions>
        <SummarizeAIContextMenuItem Text="Σύνοψη" />
    </Extensions>
</DxRichEdit>
AI Toolbar Item Text 

#AI Toolbar Prompt Augmentation

DevExpress AI-powered extensions for the Blazor Rich Text Editor and HTML Editor include pre-built prompts for selected text processing. Using the PromptAugmentation property, you can now add custom instructions to default prompts and enhance AI response relevance/accuracy.

  • Razor
<DxRichEdit>
    <Extensions>
        <SummarizeAIContextMenuItem
            PromptAugmentation="Summarize the text as a humorous limerick." />
    </Extensions>
</DxRichEdit>
Augment Summary Prompt 

Blazor Grid & TreeList

#Column Virtualization

DevExpress Blazor Grid and TreeList UI components now support column virtualization. Once this feature enabled, the DevExpress Grid and TreeList only render columns within the current viewport. This reduces DOM size and improves component load time.

You can virtualize both rows and columns simultaneously to ensure fast rendering regardless of table size. Users can navigate through cells using horizontal/vertical scroll bars or keyboard shortcuts.

  • Razor
<DxGrid Data="LargeDataSource"
        VirtualScrollingEnabled="true"
        VirtualScrollingMode="GridVirtualScrollingMode.RowsAndColumns">
    @* ... *@
</DxGrid>
Blazor Grid & TreeList — Column Virtualization 

#Context Menu

Both our Blazor Grid and TreeList include an integrated Context Menu. Users can right-click the following regions to access context-specific commands:

  • Data Row
  • Group Row
  • Column Header
  • Footer
  • Group Panel
  • Group Footer
Blazor Grid & TreeList — Integrated Context Menu

Use the ContextMenus property to enable Context Menu functionality for desired elements.

Predefined Commands

  • Auto Fit Columns
  • Expand/Collapse
  • Group/Ungroup
  • Open Column Chooser Dialog
  • Open Filter Builder Dialog
  • Sort Ascending/Sort Descending/Clear Sorting

Item Customization

Handle the CustomizeContextMenu event to customize the menu as requirements dictate:

  • Modify predefined items: Change item state, visibility, and appearance.
  • Add custom items: Introduce your own commands and actions.
  • Customize context menu per element: Example - hide sort commands for a specific column.

The following code snippet hides built-in grouping commands for the Category column and adds custom Fix/Unfix commands for the command column:

  • C#
void CustomizeContextMenu(GridCustomizeContextMenuEventArgs args) {
    var isDataColumnTarget = args.CommandContext is GridColumnCommandContext dataColumnContext &&
                               dataColumnContext.Column is IGridDataColumn dataColumn;    
    var isCommandColumnTarget = args.CommandContext is GridColumnCommandContext columnContext &&
                               columnContext.Column is IGridCommandColumn;

    if (isDataColumnTarget && dataColumn.FieldName == "Category") {
        args.Items[GridContextMenuDefaultItemNames.GroupByColumn].Visible = false;
        args.Items[GridContextMenuDefaultItemNames.UngroupColumn].Visible = false;
    } 
    
    else if (isCommandColumnTarget) {
        var isFixed = commandColumn.FixedPosition != GridColumnFixedPosition.None;
        string itemText = isFixed ? "Unfix Column" : "Fix Column to the Left";
        var newValue = isFixed ? GridColumnFixedPosition.None : GridColumnFixedPosition.Left;

        args.Items.AddCustomItem<GridColumnCommandContext>(itemText, context => {
            context.Grid.BeginUpdate();
            context.Column.FixedPosition = newValue;
            context.Grid.EndUpdate();
        });
    }
}
 

#Integrated Filter Builder

Users can now create complex filter criteria for the DevExpress Blazor Grid and TreeList using a built-in Filter Builder dialog. Our Grid and TreeList components automatically generate Filter Builder fields based on data columns (no additional code is required). Call the ShowFilterBuilder method to open the Filter Builder dialog from code. Alternatively, users can activate this dialog via the Filter Panel.

Blazor Grid & TreeList — Integrated Filter Builder

Use the FilterBuilderTemplate to customize the dialog. The template's RenderDefaultFields method allows you to reuse auto-generated fields within your custom Filter Builder control. The following code snippet adds additional filter fields to the Filter Builder dialog:

  • Razor
<FilterBuilderTemplate>
    <DxFilterBuilder @bind-FilterCriteria="context.FilterCriteria">
        <Fields>
            @context.RenderDefaultFields() @* adds auto-generated fields *@
            <DxFilterBuilderField FieldName="ShipCountry" Caption="Country">
                <EditSettings>
                    <DxComboBoxSettings Data="ShipCountries" />
                </EditSettings>
            </DxFilterBuilderField>
            <DxFilterBuilderField FieldName="ShipCity" Caption="City" />
        </Fields>
    </DxFilterBuilder>
</FilterBuilderTemplate>
 

#Filter Panel

Both DevExpress Blazor Grid and TreeList ship with an integrated Filter Panel. This panel displays the current filter criteria and allows users to:

  • Temporarily deactivate the filter
  • Open the Filter Builder dialog
  • Clear the current filter condition
Blazor Grid & TreeList — Filter Panel

Use the FilterPanelDisplayMode property to add this panel to our Blazor Grid or TreeList component.

 

#Command Column Icons

With v25.2, the DevExpress Blazor Grid and TreeList display built-in icons for command actions by default. This change reduces column width and produces a cleaner, more modern appearance.

Blazor Grid & TreeList — Command Column Icons

To display captions for command buttons, set the command column's new DisplayMode property to Text or IconsAndText.

 

#Data Export — Preserve Hierarchy for Selected Rows

When exporting DevExpress Blazor Grid or TreeList data, you can activate the ExportSelectedRowsOnly option and export selected records as flat data. Use our new SelectedRowsExportMode option to preserve selected row hierarchy (export selected records along with parent rows).

The following code snippet exports selected Grid records and corresponding group rows to PDF:

  • C#
await Grid.ExportToPdfAsync("ExportResult", new GridPdfExportOptions() {
    ExportSelectedRowsOnly = true,
    SelectedRowsExportMode = GridSelectedRowsExportMode.KeepGrouping
});
 

#New Scrolling API

New MakeCellVisible and MakeCellVisibleAsync methods allow you to navigate to a specific cell when paging or scrolling is enabled.

 

Blazor Filter Builder

#Official Release

Our Blazor Filter Builder is now ready for production use. We finalized APIs/behaviors and implemented the following new features and enhancements.

 

#Text Mode for Filter Expressions

The DevExpress Blazor Filter Builder supports text mode for filter expressions. You can use this mode to:

  • Copy and paste filter criteria.
  • Create flexible conditions incompatible with a tree structure.
  • Validate filter syntax and troubleshoot expression errors in real time.

Set the ViewMode property to VisualAndText to activate text mode.

Blazor Filter Builder - Text Mode for Filter Expressions 

#Collection Field and Aggregate Function Support

The DevExpress Blazor Filter Builder supports aggregate operators for fields that store object collections. Available functions include:

  • Exists
  • Count
  • Avg
  • Sum
  • Min/Max

These functions calculate collection summaries and allow users to create filter conditions based on aggregated results. For instance, users can filter invoices with fewer than 5 items in the Products field. Set the DxFilterBuilderField.IsCollection property to true to create a collection field.

Blazor Filter Builder - Collection Field and Aggregate Function Support 

#Filter Operator UI Enhancements

We finalized available filter operators (for each data type) and implemented the following operator list enhancements:

  • A separate Date Ranges operator group for DateTime and DateOnly field types
  • Case-insensitive search option
  • Icon support
Blazor Filter Builder - Filter Operator UI Enhancements 

#Keyboard Navigation and Accessibility Support

We added full keyboard navigation support to the DevExpress Blazor Filter Builder UI component. You can navigate between condition rows and individual items, access drop-down lists/value editors without using a mouse. This enhancement improves accessibility and streamlines user workflows, especially for keyboard-centric business solutions.

Documentation

 

#Operator Customization

v25.2 ships with customization options for operators in the DevExpress Blazor Filter Builder. You can now limit available logical operators using the GroupOperatorTypes property.

  • Razor
<DxFilterBuilder GroupOperatorTypes=@(FilterBuilderGroupOperatorType.And |
                                      FilterBuilderGroupOperatorType.Or)>
    @* ...*@
</DxFilterBuilder>

Our implementation allows you to customize filter operators. Handle the CustomizeOperators event to:

  • Manage built-in operator collections
  • Add custom criteria functions
  • Arrange operators into groups
  • Change default operators
  • Customize operator captions and icons
  • Razor
  • CustomFunction.cs
  • Program.cs
<DxFilterBuilder CustomizeOperators="CustomizeOperators">
    <Fields>
        <DxFilterBuilderField FieldName="Subject" Caption="Name" Type="@typeof(string)" />
        <DxFilterBuilderField FieldName="CreatedDate" Caption="Created Date" Type="@typeof(DateTime)" />
        <DxFilterBuilderField FieldName="Amount" Caption="Amount" Type="@typeof(int)"/>
        <DxFilterBuilderField FieldName="Discontinued" Type="@typeof(bool)"/>
    </Fields>
</DxFilterBuilder>

@code {
    void CustomizeOperators(FilterBuilderCustomizeOperatorsEventArgs args) {
        if(args.FieldName == "Amount") {
            args.Operators.Clear();
            args.Operators.Add(new FilterBuilderOperatorItem(FilterBuilderOperatorType.Equals));
            args.Operators.Add(new FilterBuilderOperatorItem(FilterBuilderOperatorType.Greater));
            args.Operators.Add(new FilterBuilderOperatorItem(FilterBuilderOperatorType.Less));
            args.DefaultOperator = args.Operators[FilterBuilderOperatorType.Less];
            args.ShowGroups = true;
        }
        if(args.FieldType == typeof(DateTime)) {
            FilterBuilderOperatorItem thisMonthOperator = args.Operators[FilterBuilderOperatorType.IsThisMonth];
            thisMonthOperator.Caption = "Falls in this month";

            var customItem = new FilterBuilderOperatorItem(IsEarlierThisMonth.Instance.Name) {
                GroupName = "Custom functions"
            };
            args.Operators.Add(customItem);
        }
    }
}
using DevExpress.Data.Filtering;

class IsEarlierThisMonth : ICustomFunctionOperator, ICustomFunctionDisplayAttributes {
    public static IsEarlierThisMonth Instance { get; } = new IsEarlierThisMonth();

    public static void Register() => CriteriaOperator.RegisterCustomFunction(Instance);
    public static bool Unregister() => CriteriaOperator.UnregisterCustomFunction(Instance);

    private IsEarlierThisMonth() { }

    public string Name => nameof(IsEarlierThisMonth);
    public string DisplayName => "Is earlier this month";
    public object Image => null;
    public int MinOperandCount => 1;
    public int MaxOperandCount => -1;
    public string Description => "Function description";
    public FunctionCategory Category => FunctionCategory.DateTime;

    public object Evaluate(params object[] operands) {
        DateTime dateTime;
        if(operands[0] is DateOnly dateOnly)
            dateTime = dateOnly.ToDateTime(TimeOnly.MinValue);
        else
            dateTime = Convert.ToDateTime(operands[0]);
        DateTime today = DateTime.Today;
        DateTime startOfMonth = new DateTime(today.Year, today.Month, 1);
        return dateTime >= startOfMonth && dateTime < today;
    }

    public bool IsValidOperandCount(int count) => count == 1;

    public bool IsValidOperandType(int operandIndex, int operandCount, Type type) => type == typeof(DateTime) || type == typeof(DateOnly);

    public Type ResultType(params Type[] operands) => typeof(bool);

}
// ...
IsEarlierThisMonth.Register();
// ...
app.Run();

Documentation

 

#Value Templates

The DevExpress Blazor Filter Builder allows you to specify templates used for field values:

Templates implement a context parameter that includes DisplayText and Value properties.

Blazor Filter Builder - Value Templates 

Blazor Data Editors

#Value Changing Events

We added new *Changing events for the following DevExpress Blazor Data Editors.

Data EditorNew Events
ComboBoxTextChanging, ValueChanging
DateEditDateChanging
Drop-Down BoxValueChanging
List BoxValuesChanging
Masked InputValueChanging
MemoTextChanging
Search BoxTextChanging
SpinEditTextChanging
TagBoxTagsChanging, ValuesChanging
Text BoxTextChanging

These events allow you to validate/cancel user changes before they are applied to editor values.

The following code handles the DateChanging event to prevent weekend day selection in the DateEdit component. If a user tries to select Saturday or Sunday, the Date Edit's value remains unchanged.

  • Razor
<DxDateEdit @bind-Date="@CurrentDate"
            DateChanging="@OnDateChanging" />

@code {
    DateTime CurrentDate { get; set; } = DateTime.Today;

    void OnDateChanging(ParameterValueChangingEventArgs<DateTime> e) {
        if (e.NewValue.DayOfWeek == DayOfWeek.Saturday ||
            e.NewValue.DayOfWeek == DayOfWeek.Sunday) {
            e.NewValue = e.OldValue;
        }
    }
}
 

#Memo — Adaptive Height Support

The DevExpress Blazor Memo can now automatically adjust height based on content:

  • In Auto mode, Memo height changes dynamically to match content.
  • The MaxRows property allows you to specify maximum component height (applies in Auto, Vertical, and VerticalAndHorizontal resize modes). When content exceeds this limit, a vertical scrollbar appears on-screen.
  • Razor
<DxMemo @bind-Text="@TextValue"
        ResizeMode="MemoResizeMode.Auto"
        MaxRows="8">
</DxMemo>
Memo — Auto Resize Mode 

#Spin Editor — Spin Button Orientation

You can now switch between horizontal and vertical orientations for DevExpress Blazor Spin Editor increment/decrement buttons. Horizontal orientation places spin buttons side by side (improves accessibility), while vertical orientation stacks them on top of each other (more compact).

  • Razor
<DxSpinEdit Value="15" ShowSpinButtons="false">
    <Buttons>
        <DxSpinButtons Orientation="Orientation.Horizontal"/>
    </Buttons>
</DxSpinEdit>
DxSpinEdit — Horizontal Button Orientation

If the Orientation property is not specified, the Spin Edit automatically arranges buttons based on device type: horizontally on mobile and tablet devices, and vertically on other devices.

 

#TagBox — Keyboard Navigation Enhancements

The DevExpress Blazor TagBox now supports keyboard navigation for tags. Users can use Arrow keys to navigate through tags, and Backspace/Delete to remove them.

 

#Date Edit & Time Edit — Time Selection UI Redesign

We reworked the drop-down menu used for DevExpress Blazor Date Edit and Time Edit components as follows:

  • Restyled and repositioned Accept and Cancel buttons (to make them more noticeable).
  • Removed the Clear button from the drop down. To clear editor values, use our new Alt+Del shortcut or click the corresponding button in the input element.
Blazor Data Editors — Redesigned Drop-Down Buttons

You can enable the ApplyValueOnOutsideClick option to remove Accept and Cancel buttons from the drop down. Date Edit and Time Edit components will update bound values once a user clicks outside a component's boundaries.

Date/Time Editor — Apply Value on Click 

Blazor Navigation

#Maximum Dropdown Height

You can specify maximum dropdown height for DevExpress Blazor Context Menu, Menu, and Toolbar components. When menu/drop-down content exceeds DropDownMaxHeight, a scrollbar appears to ensure all items remain accessible. If total height is less than the DropDownMaxHeight, this property will not have a visible effect.

  • Razor
<DxMenu DropDownMaxHeight="100px">
    <Items>
        <DxMenuItem Text="Products" Expanded="true">
            <Items>
                <DxMenuItem Text="JS / TS" />
                <DxMenuItem Text="Blazor" />
                <DxMenuItem Text="ASP.NET Core" />
                <DxMenuItem Text="ASP.NET Web Forms" />
                <DxMenuItem Text="ASP.NET MVC" />
                <DxMenuItem Text="Bootstrap Web Forms" />
                <DxMenuItem Text="Web Reporting" />
            </Items>
        </DxMenuItem>
    </Items>
</DxMenu>
 

Blazor Pivot Table

#Official Release

The DevExpress Blazor Pivot Table is now ready for production use. Our Pivot Table includes the following key features and capabilities:

  • High-performance data engine for efficient data processing.
  • Data sorting and grouping support.
  • Configurable totals and grand totals with flexible positioning.
  • Built-in horizontal/vertical scroll bars with sticky Column Field Headers and Row Field Headers areas.
  • Virtual scrolling support for both rows and columns.
  • Value formatting with integrated templates.
  • Full keyboard navigation support.
  • Customizable field values and data cell appearance.

Pivot Table RTM version release also means that our previously-available Pivot Grid component is now in maintenance mode. We do not work on new Pivot Grid functionality and plan to remove this component from our distribution in v26.2. We recommend that you migrate to the new Pivot Table. Refer to our Migration Guide for guidance.

Documentation

 

#Column Virtualization

Our Blazor Pivot Table supports both row and column virtualization. The new column virtualization feature improves performance when the Pivot Table displays a large number of columns (for instance, when displaying one column per day across an entire year). The component now renders only visible columns, reducing DOM size and improving responsiveness. We also performed extensive internal testing to verify performance and stability in high-density scenarios.

The new VirtualScrollingMode property allows you to specify whether to use row virtualization, column virtualization, or both.

  • Razor
<DxPivotTable Data="SalesData"
              VirtualScrollingEnabled="true"
              VirtualScrollingMode="PivotTableVirtualScrollingMode.Horizontal">
    <Fields>
        @*...*@
    </Fields>
</DxPivotTable>
Blazor Pivot Table — Column Virtualization 

#Keyboard Navigation

The DevExpress Blazor Pivot Table allows users to access UI elements within the following UI regions using the keyboard:

  • Filter Area
  • Data Field Headers
  • Column Headers
  • Row Headers
  • Column Field Values
  • Row Field Values
  • Data Area

Supported shortcuts:

  • Ctrl+Up/Down — Move between navigation areas.
  • Arrow keys or Tab/Shift+Tab — Navigate between elements in a navigation area.
  • Home/End — Move to the first/last cell in a row or navigation area.
  • Alt+Arrow keys, Enter — Expand/collapse groups.
  • Shift + scrolling — Horizontal scrolling.
  • Space — Toggles sort order for a focused field header.
 

Blazor Ribbon

#Official Release

The DevExpress Blazor Ribbon component is now ready for production use. Version 25.2 ships with expanded APIs, improved UI/UX, adaptive layout, and enhanced accessibility.

Blazor Ribbon — Official Release 

#Improved UI/UX

Our Blazor Ribbon was redesigned for cleaner visuals, higher contrast, and faster command discovery. New APIs allow you to customize Ribbon appearance as requirements dictate:

  • Visually emphasize Ribbon buttons using the IsPrimary attribute.
  • Apply custom CSS classes to the Ribbon application tab, buttons, and drop-down menus.
  • Limit the maximum height of Ribbon drop-down menus. A scrollbar appears if menu content exceeds the specified value.
 

#Toggle Buttons

The new DevExpress Blazor Ribbon DxRibbonToggleItem component adds a button with a persistent selection state. Use it for option buttons that remain active until deactivated.

Combine multiple Toggle Buttons into a Toggle Group and ensure only one button is selected at any one point in time.

  • Razor
<DxRibbon>
    <DxRibbonTab Text="Home">
        <DxRibbonGroup>
            <DxRibbonToggleItem Text="Bold"
                                IconCssClass="dx-icon-bold" />
            <DxRibbonToggleItem Text="Italic"
                                IconCssClass="dx-icon-italic" />
            <DxRibbonToggleItem Text="Underline"
                                IconCssClass="dx-icon-underline" />
        </DxRibbonGroup>
        <DxRibbonGroup>
            <DxRibbonToggleGroup>
                <DxRibbonToggleItem Text="Left"
                                    IconCssClass="dx-icon-alignleft" />
                <DxRibbonToggleItem Text="Center"
                                    IconCssClass="dx-icon-aligncenter" />
                <DxRibbonToggleItem Text="Right"
                                    IconCssClass="dx-icon-alignright" />
            </DxRibbonToggleGroup>
        </DxRibbonGroup>
    </DxRibbonTab>
</DxRibbon>
Toggle Buttons and Toggle Group 

#Adaptive Layout

DevExpress Blazor Ribbon automatically adapts to available screen space:

  • Hides lower-priority details (such as button captions).
  • Collapses groups into drop-down menus.
  • Moves excess items into structured overflow menus.

The Ribbon offers two adaptivity modes: single overflow menu (collapses all items and groups into one structured menu) and per-group overflow menus (each group uses its own menu). Select a mode using AdaptivityAutoCollapseItemsToGroups.

You can also configure item relative priority so that essential commands remain visible even on narrow screens.

Ribbon Adaptive Layout 

#Accessibility & Keyboard Navigation

DevExpress Blazor Ribbon offers full keyboard navigation across tabs, groups, and items. Keyboard shortcuts allow users who cannot use a mouse or rely on assistive technologies (like screen readers or switch devices) to interact with application content:

  • Tab moves focus to the next/previous Ribbon element.
  • Arrow keys move focus between Ribbon elements and open/close drop-down menus.
  • Enter or Space clicks the focused Ribbon item.
  • Home/End focuses the first/last item.
  • Esc closes drop-down menus.

You can also assign HTML and ARIA attributes (roles, states, labels) to Ribbon controls to improve screen reader output and strengthen accessibility compliance.

 

#API Enhancements

 

#Rich Text Editor and HTML Editor Integration

The DevExpress Rich Text Editor and HTML Editor now use our new Ribbon to unify APIs, simplify configuration, and deliver a consistent appearance.

 

Blazor Rich Text Editor

#Scroll API

The DevExpress Blazor Rich Text Editor allows you to scroll documents programmatically using the following methods:

  • ScrollToPageAsync — Scrolls the document to the specified page.
  • ScrollToPositionAsync — Scrolls the view to the specified position in the main sub-document or in headers/footers (using optional parameters).
  • Razor
<DxRichEdit @bind-DocumentContent="@documentContent" @ref="richEdit" />

<DxButton Text="First page" Click="@ScrollToFirstPage" />
<DxButton Text="Footer" Click="@ScrollToFooter" />

@code {
    DxRichEdit richEdit;
    byte[] documentContent;
    string filePath = "C:\\Users\\Public\\example.docx";

    protected override async Task OnInitializedAsync() {
        documentContent = await File.ReadAllBytesAsync(filePath);
        await base.OnInitializedAsync();
    }

    async Task ScrollToFirstPage() {
        await richEdit.ScrollToPageAsync(0);
    }
    async Task ScrollToFooter() {
        Section section = await richEdit.DocumentAPI.Sections.GetAsync(0);
        SubDocument footer = await section.GetFooterAsync();
        if (footer != null)
            await richEdit.ScrollToPositionAsync(0, footer);
    }
}
 

Blazor Scheduler

#Timeline & Month Views — Compact Cell Size

Our Blazor Scheduler calculates cell height based on the number of appointments and associated size. We also removed the minimum height requirement (160px in Fluent; 150px in classic themes). This change allows you to create more compact interfaces and maximize on-screen information display.

You can use the following properties to modify cell size based on design requirements:

  • CellMinHeight: Specifies minimum cell height.
  • LastAppointmentIndent: Specifies indent from the last appointment to the cell border.
  • ResourceCaptionOrientation: Specifies resource caption arrangement (vertically or horizontally) when appointments are grouped.
  • VerticalResourceCellWidth: Specifies resource cell width for horizontally aligned resource captions.
  • Razor
<DxScheduler @bind-StartDate="@StartDate"
             DataStorage="@DataStorage"
             GroupType="SchedulerGroupType.Date">
    <DxSchedulerTimelineView Duration="@TimeSpan.FromHours(48)"
                             CellMinHeight="50"
                             LastAppointmentIndent="3"
                             ResourceCaptionOrientation="Orientation.Horizontal"
                             VerticalResourceCellWidth="120">
        <Scales>
            <DxSchedulerTimeScale Unit="@SchedulerTimeScaleUnit.Day" UnitCount="1" />
        </Scales>
    </DxSchedulerTimelineView>
</DxScheduler>

Blazor Scheduler — Compact Cell Height

 

#Time Cells & Appointment Hover Effect

We added a new effect indicating that a hovered cell is interactive:

  • For an empty area, the hover effect suggests to create a new appointment.
  • For existing appointments, the hover effect signals that the item can be edited or resized.

If you disable appointment generation or editing, hover will not appear on-screen.

Hover Effect in Time and Appointment Cells

 

#Appointment Tooltip & Edit Form Layout Changes

We reworked the design of Blazor Scheduler popup elements (tooltip and compact/extended edit form) as follows:

  • Introduced dedicated captions for tooltips and creating/editing appointments.
  • Replaced solid fill in element headers with less colorful alternatives.
  • Placed the All Day switcher next to Start Date and Time editors.
  • Redesigned Save, Discard, and Expand buttons in edit forms.
  • Removed the Close button tooltip.
  • Removed the Resource field placeholder from the edit form.

These changes improve visual structure, reduce unnecessary spacing, and contribute to a cleaner, more consistent UI.

Blazor Scheduler — Visual Changes in Popup-Based Elements

 

Blazor Themes

#Fluent — Public CSS Variables

We finalized CSS variables available in Fluent. You can now use --dxds-* variables to customize Fluent themes or simply reference these variables in your own stylesheets.

  • HTML
<style>
    .my-card {
        position: relative;
        display: flex;
        flex-direction: column;
        min-width: 0;
        overflow-wrap: break-word;
        background-color: var(--dxds-color-surface-neutral-default-rest);
        background-clip: border-box;
        border: var(--dxds-border-width-10) solid var(--dxds-color-border-neutral-default-rest);
        border-radius: var(--dxds-border-radius-40);
    }
</style>
 

#Fluent — Bootstrap Styles

Fluent themes now ship with optional Bootstrap styles for the default color accent (blue) in both light and dark modes. You can include Bootstrap styles as follows:

  • Razor
@DxResourceManager.RegisterTheme(Themes.Fluent.Clone(properties => {
    properties.UseBootstrapStyles = true;
}))

For styles dependent on Fluent accent colors, we recommend using DevExpress CSS variables instead. Due to Bootstrap's CSS architecture, Bootstrap styles will not reflect your accent colors, so use them for non-color customizations.

 

#Theme API — Active Theme

You can now determine the active theme used within your DevExpress-powered app:

  • via the ActiveTheme property and the ThemeChanged event in the IThemeChangeService interface.
  • via the DXActiveTheme cascading parameter.
  • Razor
@inject IThemeChangeService ThemeChangeService

<div>Hello, @ActiveTheme.Name!</div>
@* ... *@

@code {
    [CascadingParameter(Name = "DXActiveTheme")]
    public ITheme ActiveTheme { get; set; }

    protected override void OnInitialized() {
        base.OnInitialized();
    }
}
 

Blazor Windows

#DropDown & Flyout — Keyboard Navigation Support

DevExpress Blazor DropDown and Flyout components now offer the following accessible keyboard navigation options:

  • When a window is open, focus moves to its first interactive element or the Close button.
  • Tab/Shift+Tab move focus to the next/previous focusable element inside a window. In non-modal windows, focus can exit to surrounding page content or to the next/previous window when you move past the last/first element.
  • Escape closes the active window.
 

#Message Box HTML Attributes

The DevExpress Blazor Message Box allows you to add standard HTML attributes at runtime. Use the Attributes property to supply the Attributes collection, or specify individual attributes directly in Message Box markup. Semantic attributes improve screen reader support and strengthen accessibility compliance.

  • Razor
<DxMessageBox @bind-Visible="MessageBoxVisible"
              Title="Error"
              Text="Unable to process the request. Please try again later or contact support."
              OkButtonText="Contact Support"
              CancelButtonText="Try Later"
              RenderStyle="MessageBoxRenderStyle.Danger"
              Type="MessageBoxType.Confirmation"
              data-priority="1" />

@code {
    bool MessageBoxVisible { get; set; } = false;

    protected override void OnInitialized()
    {
        base.OnInitialized();
        MessageBoxVisible = true;
    }
}
 

.NET Reports v25.2

.NET 10 & Visual Studio 2026 Support

DevExpress Reports now supports .NET 10 and Visual Studio 2026.

 

Design Reports in JetBrains Rider (CTP)

DevExpress Reports now offer full design-time integration with JetBrains Rider for .NET Framework projects (ASP.NET, WinForms, and WPF). You can use the built-in DevExpress Report Designer to configure data bindings, build and customize layouts, and preview reports without leaving the IDE.

 

Report Designer in JetBrains Rider - DevExpress Reports

 

Features include:

  • Create new reports and modify existing reports.
  • Fully customizable design surface with drag & drop support.
  • Preview reports directly in an integrated Report Preview.
  • Create and configure data sources using the Data Source Wizard.

Please note that support for .NET projects is planned for early 2026 (likely in a minor update of v25.2).

Documentation

 

DevExpress Template Kit

#New Project and Item Templates for WinForms

DevExpress Template Kit v25.2 includes the following templates for WinForms-based projects:

Report Viewer Application (Project Template)

Creates a desktop (WinForms) application with a Report Viewer (displays a pre-built tabular report).

Report Viewer Application (Project Template) - DevExpress Reports

Report (Item Template)

Adds a new DevExpress Report to a WinForms project.

Report Viewer Application (Project Template) - DevExpress Reports

 

#DevExpress Documentation MCP Server

DevExpress Template Kit project templates now include optional MCP server configuration support for Visual Studio and VS Code.

Documentation

 

Accessibility Enhancements

#PDF Export — New UI Element Roles

The XRAccessibleRole enumeration includes the following new values:

  • Decorative
  • Figure
  • Paragraph

Elements marked as Decorative are treated as artifacts and excluded from the logical structure of exported PDF documents. Such elements do not appear in the tag tree, are ignored by assistive technologies, and are considered external to main content.

Use Figure and Paragraph values for report watermarks meant to convey meaningful information and to be announced by assistive technologies.

 

#PDF Export — Mark Report Controls as Decorative Elements (Artifacts)

Assistive software treats XRPictureBox, XRShape, XRBarCode, and XRZipCode controls in PDF documents as figures (<Figure>). Use the AccessibleRole property to mark these UI elements as artifacts and exclude them from the logical structure of exported PDF documents:

  • C#
xrShape1.AccessibleRole = XRAccessibleRole.Decorative;
 

#PDF Export — Add Alternative Text to Report Watermarks

Use the following properties to specify whether to include report watermarks in the logical structure of exported PDF documents:

  • For image watermarks that convey meaningful information, set the ImageAccessibleRole property to XRAccessibleRole.Figure and use the XRWatermark.ImageAccessibleDescription property to specify alternative text.

  • For text watermarks, set the TextAccessibleRole property to XRAccessibleRole.Paragraph and use the XRWatermark.TextAccessibleDescription property to specify alternative text.

For purely decorative watermarks, retain the default value to treat the watermark as an artifact.

 

#Report Design Analyzer — Validate Documents for Accessibility Compliance

The Report Design Analyzer now validates layout, document generation, and export settings for accessibility compliance across all supported platforms.

To enable accessibility validation in the Report Designer for Visual Studio, set the Enable Accessibility Validation option to true to include accessibility-related messages within the displayed message categories in the Error List:

Enable Accessibility Validation in VS

Accessibility messages are added to the appropriate message category depending on their type: Error, Warning, or Information.

Accessibility Messages in the Error List

For End-User Report Designers, click the Accessibility bar item in the UI panel to display accessibility-related messages in the Report Design Analyzer.

Accessibility Messages in the Report Design Analyzer

We introduced multiple accessibility issues with error codes starting with the AY prefix to cover the main accessibility issues that arise when creating or exporting a report.

Review the following help topic for the complete error list: Errors, Warnings, and Information Messages.

 

DateOnly & TimeOnly Support

#Time-Range Parameter Editors

DevExpress Report Viewers for Web, WPF, and Blazor now support TimeOnly range parameters. Users can filter reports against time intervals independent of specific dates.

Time Range Parameter Editors

The following code snippet creates and adds DateOnly and TimeOnly range parameters to a report:

  • C#
var report = new XtraReport();
// ...
// Add the start interval value.
var p1start = new RangeStartParameter() {
    Type = typeof(DateOnly),
    Value = DateOnly.FromDateTime(DateTime.Today).AddDays(-7),
};

// Add the end interval value.
var p1end = new RangeEndParameter() {
    Type = typeof(DateOnly),
    Value = DateOnly.FromDateTime(DateTime.Today),
};

// Add the range parameter.
var p1 = new Parameter() {
    Type = typeof(DateOnly),
    Value = DateOnly.FromDateTime(DateTime.Today),
    ValueSourceSettings = new RangeParametersSettings(p1start, p1end)
};

report.Parameters.Add(p1);

// Add the start interval value.
var p2start = new RangeStartParameter() {
    Type = typeof(TimeOnly),
    Value = TimeOnly.FromTimeSpan(TimeSpan.FromMinutes(10)),
};

// Add the end interval value.
var p2end = new RangeEndParameter() {
    Type = typeof(TimeOnly),
    Value = TimeOnly.FromTimeSpan(TimeSpan.FromMinutes(30)),
};

// Add the range parameter.
var p2 = new Parameter() {
    Type = typeof(TimeOnly),
    Value = TimeOnly.FromDateTime(DateTime.Today),
    ValueSourceSettings = new RangeParametersSettings(p2start, p2end)
};

report.Parameters.Add(p2);

Our Time Range Parameter Editor supports predefined range customization.

Use the RangeParameterEditorOptions class to programmatically add or modify custom range values within your DevExpress-powered WinForms and WPF application:

  • C#
RangeParameterEditorOptions.PredefinedTimeRanges.Remove("Lunch Time");
RangeParameterEditorOptions.RegisterTimeRange("CustomTimeInterval", () => new TimeOnly(10, 30, 00), () => new TimeOnly(11, 30, 0));

Review the following help topics for additional information (customize predefined range values in a web application):

 

AI-powered Report Extensions

#AI-powered Visual Studio Report Designer

v25.2 introduces the following AI-powered features in the Visual Studio Report Designer:

AI-powered features in the Visual Studio Designer require the DevExpress AI-powered Assistant extension, which is included in the DevExpress Unified Component Installer. Before using AI-powered features, connect the DevExpress AI Assistant to Azure OpenAI or OpenAI service and configure required settings.

Go to ToolsOptionsDevExpressAI Assistant to open AI Assistant options:

AI Assistant Options - Configure AI Services in Visual Studio, DevExpress

 

#Create Expressions with Natural Language

Our Visual Studio Report Designer and WinForms End-User Report Designer allow you to generate Criteria Language expressions with AI assistance, within both the DevExpress Expression Editor and Filter String Editor. Instead of writing complex expressions, users can describe the desired logic in plain text.

Prompt to Expression - WinForms Expression and Filter Editors, DevExpress Reports

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

Documentation:

 

#Preview Reports with AI-generated Test Data

You can generate AI-powered test data to preview reports without connecting to a live data source directly within the Visual Studio Report Designer and End-User Report Designers for WinForms/WPF. This will be of value if you design a report and wish to quickly check recent changes without access to a real data source. It also allows report creators to share report documents without including actual data.

Visual Studio Report Designer

Click the Test Data tab to preview a report with AI-generated test data. Our Report Designer requests data from an LLM and populates the report with meaningful values for preview.

AI-powered Test Data - Visual Studio Report Designer, DevExpress

End-User Report Designer for WPF

To activate AI-generated Test Data in the WPF Report Designer, create a ReportTestDataSourceBehavior and configure its RowCount and Temperature settings:

  • XAML
<dxrud:ReportDesigner x:Name="reportDesigner">
    <dxmvvm:Interaction.Behaviors>
        <dxai:ReportTestDataSourceBehavior x:Name="testDataSourceBehavior"
                RowCount="10"
                Temperature="0"/>
    </dxmvvm:Interaction.Behaviors>
</dxrud:ReportDesigner>

Preview Reports with AI-generated Test Data - DevExpress WPF Report Designer

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

End-User Report Designer for WinForms

Follow the steps below to attach a Report Test Data Source Behavior to the WinForms Report Designer at design time:

  • Drop the BehaviorManager component from the Toolbox onto a Form with the WinForms Report Designer.

  • Invoke the BehaviorManager's smart tag menu and click Edit Behaviors to open the Behavior Collection Editor.

  • Add a Report Test Data Source Behavior and specify its RowCount and Temperature settings.

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

Documentation:

 

#Localize Reports with AI

AI-powered Report Localization allows you to translate report elements into a target language directly within the Visual Studio Report Designer and End-User Report Designers for WinForms/WPF.

Our Localization Editor displays a Localize with AI button and automatically collects all static strings within a report and sends them to the AI service of choice for translation.

AI-powered Report Localization - WPF Report Designer, DevExpress

To execute this demo, you must first
install the BETA - active Universal or DXperience subscription is required.
 

End-User Report Designer for WPF

Attach the ReportLocalizationBehavior to the WPF Report Designer to leverage AI-powered localization:

  • XAML
<dxrud:ReportDesigner x:Name="reportDesigner">
    <dxmvvm:Interaction.Behaviors>
        <dxai:ReportLocalizationBehavior/>
    </dxmvvm:Interaction.Behaviors>
</dxrud:ReportDesigner>
 

Documentation:

 

#Create AI-powered Reports Using Report Wizard (CTP)

You can leverage AI to create report layouts based on natural language prompts directly within the Visual Studio Report Designer and End-User Report Designers for WinForms/WPF.

Add a DevExpress Report item to your project or open the Report Wizard for an existing report using the report's smart tag menu. In the Report Wizard, select AI Prompt-to-Report and follow on-screen instructions.

AI Prompt-to-Report - DevExpress Report Wizard

In the Enter Report Description step, enter a prompt or choose a predefined prompt and modify it as needed. Once complete click Finish.

Report Description - DevExpress Report Wizard

AI-powered report generation supports two data source modes:

  • No Data Source
    Creates a complete report structure based on a user’s natural language description.

  • Add Data Source
    Creates and configures a report data source. The Report Wizard displays the data source structure and automatically includes this metadata in the LLM prompt. Users can reference available data source fields as they create data-bound report elements.

Use the following settings to configure AI-powered report generation:

SettingDescription
FixLayoutErrors When enabled, AI automatically attempts to correct layout issues (for example, misaligned controls or overlapping elements) in the generated report.
RetryAttemptCount Specifies the number of times AI should retry report generation if the initial attempt fails.
Temperature Controls randomness in AI output and produces more deterministic results. Higher values increase variation.
PromptAugmentation Specifies additional instructions that modify the prompt before processing.
 

End-User Report Designer for WPF

To activate this feature in a DevExpress AI-powered WPF application, use ReportPromptToReportBehavior:

  • XAML
<dxrud:ReportDesigner x:Name="designer">
    <dxmvvm:Interaction.Behaviors>
        <dxai:ReportPromptToReportBehavior/>
    </dxmvvm:Interaction.Behaviors>
</dxrud:ReportDesigner>
 

Documentation:

 

#AI-powered Inline Report Translation — WPF Document Viewer

WPF Document Preview includes a new Translate Inline command in the AI context menu. Unlike the Translate command, Translate Inline translates report content directly within the preview and prints/exports the translated document (displaying a notification about AI-generated content before processing).

AI-powered Inline Report Translation — WPF Document Viewer, DevExpress Reports

To activate Translate Inline in your DevExpress-powered WPF application, attach the DocumentTranslateInlineBehavior to the Document Preview control:

  • XAML
<dxp:DocumentPreviewControl Name="preview"> 
    <dxmvvm:Interaction.Behaviors> 
        <dxai:DocumentTranslateInlineBehavior>
                <dxai:LanguageInfo Culture="de-DE"/> 
                <dxai:LanguageInfo Culture="pt-BR"/> 
        </dxai:DocumentTranslateInlineBehavior>
    </dxmvvm:Interaction.Behaviors> 
</dxp:DocumentPreviewControl>

Documentation

 

#Optimized Token Consumption for AI Report Operations

We improved system prompts and AI tools used when generating/modifying reports (to help optimize token consumption).

 

#System Prompt Augmentation — Custom Context

DevExpress AI-powered Report Extensions now support system prompt augmentation with custom context. For example, you can supply industry-specific terminology to the AI-powered localization extension to ensure correct word usage, exclude specific report items from translation, and specify the source language.

 

Reporting for Blazor

#Report Viewer — New Events

The DevExpress Blazor Report Viewer includes additional events designed to extend functionality and give you greater control over user interactions.

EventDescription
OnPreviewClick Occurs when a user clicks a report document.
OnPreviewDoubleClick Occurs when a user double-clicks a report document.
OnReportOpened Occurs when a report is loaded in the Report Viewer.

Click events can help identify the clicked report element and execute custom actions (such as handling URL navigation, retrieving clicked row data to generate a separate report, canceling a drill-through operation, or displaying a custom popup).

The following code snippet handles the OnPreviewClick event and displays the text associated with the clicked "brick". It also suppresses the default action for the Label 2 brick:

  • Razor
@using DevExpress.Blazor.Reporting
@using DevExpress.Blazor.Reporting.Models
@using DevExpress.XtraReports.UI

<div>Clicked: @Clicked</div>

<DxReportViewer @ref="viewer"
                Report="Report"
                OnPreviewClick="OnPreviewClick"
                OnReportOpened="OnReportOpened" />

@code {
    private DxReportViewer? viewer;
    private XtraReport Report = new TestReport();
    private string? Clicked;

    private Task OnPreviewClick(PreviewClickEventArgs e)
    {
        if (e.Brick is null) {
            Clicked = "Empty area";
            return Task.CompletedTask;
        }

        // Suppresses the default action for "Label 2".
        if (e.Brick.Text == "Label 2") {
            e.Handled = true;
        }
        Clicked = e.Brick.Text;
        return Task.CompletedTask;
    }
}

Handle the OnReportOpened event to activate a specific tab in the Report Viewer's tab panel. The following code snippet activates the Parameter Panel tab when a report is opened (the report's RequestParameters property is set to false):

  • C#
void OnReportOpened(ReportOpenedEventArgs args) {
    reportViewer.TabPanelModel.ActivateTab(TabId.Parameters);
}
 

#Report Viewer — 'Select All' for Multi-Value Parameters

The Multi-Value Parameter Editor in the Blazor Report Viewer now includes a Select All option and updated UI/UX.

Report Viewer - 'Select All' for Multi-Value Parameters, DevExpress Reports

 

Reporting for Web

#MongoDb Data Source Wizard and API to Register Predefined Connections

The DevExpress Web Report Designer allows users to connect to MongoDB data sources. To display the MongoDB option in the Data Source Wizard, you must:

The MongoDB option appears in the Select Data Source page of the Data Source Wizard.

Web Report Designer - MongoDb Data Source Wizard, DevExpress Reports

Documentation

 

#New Time Zone Conversion Expression Functions

v25.2 introduces built-in expression functions designed to convert UTC date/time values to/from the users's local time zone. Users in different regions can view and analyze report data in their own time zones.

Use the following expression functions to integrate this functionality:

Expression FunctionDescription
UtcToLocalTime(datetime) Converts a UTC date-time value to the local time zone.
LocalTimeToUtc(datetime) Converts a local date-time value to UTC.

To specify the local time zone for date values displayed in reports, implement the ITimeZoneProvider interface and register it in the application's service collection.

The following code snippet registers the CustomTimeZoneProvider service in an ASP.NET Core application and obtains the time zone identifier from the timezone browser cookie:

  • C#
//Services/CustomTimeZoneProvider.cs

using System;
using DevExpress.XtraReports.Services;
using Microsoft.AspNetCore.Http;

namespace MyReportingApplication.Services {
    public class CustomTimeZoneProvider : ITimeZoneProvider {
        private readonly string timeZoneId;

        public CustomTimeZoneProvider(IHttpContextAccessor httpContextAccessor) {
            timeZoneId = httpContextAccessor.HttpContext?.Request.Cookies["timezone"];
        }

        public TimeZoneInfo GetCurrentTimeZone() {
            var tzId = timeZoneId ?? "UTC";

            try {
                return TimeZoneInfo.FindSystemTimeZoneById(tzId);
            } catch {
                return TimeZoneInfo.Utc;
            }
        }
    }
}

//Program.cs
...
using DevExpress.AspNetCore.Reporting;
using DevExpress.XtraReports.Services;
using DevExpressApp.Services;

var builder = WebApplication.CreateBuilder(args);
//...
builder.Services.AddScoped<ITimeZoneProvider, CustomTimeZoneProvider>();
//...
var app = builder.Build();
// ...
app.Run();

Documentation

 

#Line Spacing in Labels and Table Cells

The Web Report Designer now applies the LineSpacing property to text rendered in labels and table cells.

 

Reporting for Desktop

#Data Source Wizard — Favorite (Pinned) Data Sources

You can pin frequently used database providers as favorites in the Data Source Wizard for Visual Studio and WinForms/WPF Report Designers. Pinned providers appear at the top of the list on the Select a Data Connection Type page.

Data Source Wizard — Favorite (Pinned) Data Sources, DevExpress Reports

Documentation

 

#WinForms End-User Report Designer — Designer Settings Dialog

The WinForms Report Designer ships with a new Designer Settings dialog. This dialog allows users to configure report design and document generation settings globally at the app level. The dialog consolidates frequently used options, simplifies panel management, and streamlines customization of new reports created with the Report Wizard.

The Designer Settings dialog "groups" settings into the following categories:

  • General – Report Designer UI and dock panel settings
  • Data – Application-wide data binding and schema discovery settings
  • New Report – Default layout, appearance, and script settings for newly created reports
  • Export – PDF and CSV export-related settings

WinForms End-User Report Designer — Designer Settings Dialog, DevExpress Reports

You can restrict access to the Designer Settings dialog and prevent users from changing global report design or export settings. To disable access to this dialog, call the XRDesignMdiController.SetCommandVisibility method:

  • C#
reportDesigner1.SetCommandVisibility(ReportCommand.Settings, CommandVisibility.None);

Documentation

 

#WinForms End-User Report Designer — High-DPI and Per-Monitor v2 Rendering

We enhanced high-DPI and Per-Monitor v2 rendering for multiple Report Designer UI elements (to ensure consistent display quality and precise scaling in any display configuration, including multi-monitor setups with different DPI settings).

Updated elements include:

  • Query Builder
  • Master-Detail and Federation Data Source Editor
  • Report Control Drag Handles
  • Report Designer Toolbox
  • Smart Tags and Verbs
  • Data Source Drop-Down Editors
 

PDF Export

#Object Stream Compression

Object stream compression also applies to PDF export from other DevExpress products — Reporting, Rich Text Editor, and Spreadsheet Controls. To enable object stream compression in these products, set the static PrintingSettings.CompressPdfWithObjectStreams property to true:

  • C#
using DevExpress.XtraPrinting.Native;

// Enable object stream compression for PDF export
PrintingSettings.CompressPdfWithObjectStreams = true;
 

SQL Data Source

#Connection Provider Enhancements

Our SqlDataSource now supports the most recent versions of the following database engines:

  • PostgreSQL 18.0
  • Microsoft SQL Server 2025

Documentation

 

Business Intelligence Dashboard v25.2

.NET 10 & Visual Studio 2026 Support

DevExpress BI Dashboard now supports .NET 10 and Visual Studio 2026.

 

DevExpress Template Kit

#New Project and Item Templates

DevExpress Template Kit v25.2 includes new BI Dashboard-related templates for WinForms, WPF, and ASP.NET Core Blazor projects.

  • BI Dashboard Viewer Application
    Creates a WinForms application and includes the DevExpress BI Dashboard Viewer to display key metrics from a sample data source.

    BI Dashboard Viewer Application, DevExpress

  • ASP.NET Core Blazor BI Dashboard Application
    Creates a web application (Blazor Server or Blazor WebAssembly Hosted) and includes the DevExpress BI Dashboard Control.

    ASP.NET Core Blazor BI Dashboard Application Template, DevExpress

  • Dashboard
    Adds an empty DevExpress BI Dashboard to a WinForms/WPF project.

 

WinForms Dashboard Designer

#Data Source Wizard — Favorite Data Sources

The WinForms Data Source Wizard allows users to mark frequently used data providers as favorites. Favorite data providers appear at the top of the Select a Data Connection Type page (improves access to preferred providers).

Favorite Data Sources - WinForms Dashboard Designer, DevExpress

Documentation

 

Web Dashboard Designer

#MongoDB Data Source Wizard

The Web Dashboard Data Source Wizard allows users to create data sources based on MongoDB connections and schemas defined by application developers.

Create a MongoDB Data Source - Web Dashboard, DevExpress

To display the MongoDB option in the Data Source Wizard, you must:

  • Install the MongoDB.Driver NuGet package.
  • Register the MongoDB connection.
  • Open the Data Source Wizard and select MongoDB as the data source type.
  • Specify the connection, choose the collection, and define queries and filters.

Documentation

 

SQL Data Source

#Connection Provider Enhancements

Our SqlDataSource now supports the most recent versions of the following database engines:

  • PostgreSQL 18.0
  • Microsoft SQL Server 2025

Documentation

 

Office File API v25.2

AI-powered Document Processing APIs

DevExpress Office File API products (Word and PDF Processing Document API, Presentation API library) now support NLP-powered text transform extensions. AI-powered extensions allow you to enhance the way users interact with and manage text-based content. These DevExpress extensions leverage advanced natural language processing (NLP) technologies and enable you to integrate advanced language models directly into document processing scenarios.

The following features are available:

  • Summarization
  • Translation
  • Proofreading
  • Contextual Q&A ("Ask AI")
  • C#
using DevExpress.AIIntegration;
using DevExpress.AIIntegration.Docs;
using Microsoft.Extensions.AI;

// Configure Azure OpenAI endpoint and API key via environment variables.
string azureOpenAIEndpoint = "AZURE_OPENAI_ENDPOINT";
string azureOpenAIKey = "AZURE_OPENAI_APIKEY";
var modelName = "gpt-4o-mini";

// Register an Azure OpenAI client and obtain the
// default AI extensions container.
    IChatClient client =
        new Azure.AI.OpenAI.AzureOpenAIClient(
            new Uri(azureOpenAIEndpoint),
            new System.ClientModel.ApiKeyCredential(azureOpenAIKey))
        .GetChatClient(modelName)
        .AsIChatClient();

AIExtensionsContainerDefault defaultAIExtensionsContainer =
    AIExtensionsContainerConsole.CreateDefaultAIExtensionContainer(client);

Documentation

 

#Translate & Proofread Word Documents, PDF Files, and Presentations

Office File API v25.2 ships with the following AI-powered translation and proofreading capabilities:

  • Proofread and translate entire Word documents and PowerPoint presentations (or specific sections including paragraphs, slides, custom ranges). Our extensions automatically update selected files and preserve original formatting.
  • Translate entire PDF documents or specific pages/regions and obtain text responses.
  • C#
using DevExpress.AIIntegration.Docs;
using DevExpress.XtraRichEdit;
using Microsoft.Extensions.AI;

// Create a document processing service instance
// from the AI extensions container.
var docProcessingService = new AIDocProcessingService(defaultAIExtensionsContainer);

using (var wordProcessor = new RichEditDocumentServer()) {
    // Load source document (ensure file exists in relative Documents folder).
    wordProcessor.LoadDocument("Documents/FirstLookShortened.docx");

    // Proofread entire document (culture en-US).
    await docProcessingService.ProofreadAsync(wordProcessor, new System.Globalization.CultureInfo("en-US"));

    // Translate the document to German.
    await docProcessingService.TranslateAsync(paragraph.Range, new System.Globalization.CultureInfo("DE-DE"));
    wordProcessor.SaveDocument("Documents/translation.docx", DocumentFormat.Docx);
}
 

#Ask Questions about the Word Document and PDF Files

Our new AskAI extension methods allow you to ask contextual questions about a document using custom prompts.

  • C#
using DevExpress.AIIntegration.Docs;
using DevExpress.Pdf;
using Microsoft.Extensions.AI;

// Create a document processing service instance
// from the AI extensions container.
var docProcessingService = new AIDocProcessingService(defaultAIExtensionsContainer);

using (var pdfDocumentProcessor = new PdfDocumentProcessor()) {
    FileStream fs = File.OpenRead(
        Path.Combine(
            AppDomain.CurrentDomain.BaseDirectory,
            @"Documents/Document1.pdf"));
        pdfDocumentProcessor.LoadDocument(fs, true);
    fs.Close();

    string result =
        await docProcessingService.AskAIAsync(
            pdfDocumentProcessor,
            "What terms does this document contain?");
}

Documentation

 

#Summarize Word Documents, PDF Files, and Presentations

Use Summarize extension methods to generate a short summary of a document or a presentation. The following summarization modes are available:

Abstractive Summarization

Understands original text context and rephrases it in a new, concise form. AI "writes" a new summary based on its understanding and generates new sentences (instead of reusing the original wording).

Extractive Summarization

Selects and extracts key sentences/phrases from the original text. AI identifies the most important content and combines them into a summary without altering the original wording.

  • C#
using DevExpress.AIIntegration.Docs;
using DevExpress.Docs.Presentation;

// Create a document processing service instance
// from the AI extensions container.
var docProcessingService = defaultAIExtensionsContainer.CreateAIDocProcessingService();

var presentation = new Presentation(File.ReadAllBytes("Documents/Presentation.pptx"));
string summary = await docProcessingService.SummarizeAsync(
    presentation,
    SummarizationMode.Extractive,
    CancellationToken.None);
 

PDF Document API

#Object Stream Compression and Optimization

DevExpress PDF Document API now supports automatic object stream compression (to reduce file size when saving documents). Object streams (PDF 1.5+) pack multiple PDF objects into a single compressed stream without affecting document content or quality.

When you save a document, our API recreates all objects within new compressed streams to improve internal structure and compression efficiency.

To enable object stream optimization, you must:

The following code snippet merges multiple PDF files and removes duplicate object streams:

  • C#
using DevExpress.Pdf;

using (PdfDocumentProcessor processor = new PdfDocumentProcessor()) {
    // Create an empty document with object stream optimization
    var saveOptions = new PdfSaveOptions() {
        UseObjectStreams = true
    };
    processor.CreateEmptyDocument("Merged.pdf", saveOptions);

    // Append multiple PDF files
    processor.AppendDocument("Document1.pdf");
    processor.AppendDocument("Document2.pdf");
    processor.AppendDocument("Document3.pdf");
    // Duplicate object streams are automatically eliminated
}

Documentation:

 

#Object Stream Compression for PDF Export in Other DevExpress Products

PDF export operations in DevExpress Reports, Rich Text Editor, and Spreadsheet Controls also supports object stream compression. To activate object stream compression in these products, set the static PrintingSettings.CompressPdfWithObjectStreams property to true:

  • C#
using DevExpress.XtraPrinting.Native;

// Enable object stream compression for PDF export
PrintingSettings.CompressPdfWithObjectStreams = true;
 

#Enhanced Image Compression Support - Grayscale & Bitonal

DevExpress PDF Document API includes specialized compression algorithms for grayscale and bitonal (black-and-white) images. You can also convert color images to grayscale to reduce file size when color accuracy is not essential.

The following code snippet optimizes a PDF document using new compression options:

  • C#
using DevExpress.Pdf;

using (PdfDocumentProcessor processor = new PdfDocumentProcessor()) {
    processor.LoadDocument("Document.pdf");

    // Configure optimization options
    var optimizationOptions = new PdfOptimizationOptions();

    // Convert color images to grayscale
    optimizationOptions.ImageCompression.ConvertGrayscale = true;

    // Set compression for grayscale images
    optimizationOptions.ImageCompression.GrayscaleCompressionType =
        PdfGrayscaleImageCompressionType.Jpeg;
    optimizationOptions.ImageCompression.JpegQuality = 80;

    // Set compression for bitonal (black and white) images
    optimizationOptions.ImageCompression.BitonalCompressionType =
        PdfBitonalImageCompressionType.CCITTGroup4;

    // Optimize and save the document
    processor.OptimizeDocument(optimizationOptions);
    processor.SaveDocument("Optimized.pdf");
}

Documentation

 

#Remove Optional Content During Optimization

DevExpress PDF Document API v25.2 allows you to optimize file size by removing optional content, such as:

  • Metadata (author, creation date, etc.)
  • Embedded files and attachments
  • Bookmarks
  • Page preview thumbnails
  • Interactive JavaScript code
  • Accessibility and structure information

The following code snippet removes unnecessary content from a PDF file:

  • C#
using DevExpress.Pdf;

using (PdfDocumentProcessor processor = new PdfDocumentProcessor()) {
    // Load the document
    processor.LoadDocument("Document.pdf");

    // Configure optimization options
    var options = new PdfOptimizationOptions() {
        // Remove unnecessary elements
        RemoveMetadata = true,
        RemoveAttachments = true,
        RemoveThumbnails = true,
        }
    };

    // Optimize the document
    processor.OptimizeDocument(options);

    // Save the result
    processor.SaveDocument("Document.optimized.pdf");
}

Documentation

 

#PDF/A Processing Enhancements

We've enhanced PDF/A file processing capabilities (import, edit, and save) when using the DevExpress PDF Document API. This capability ensures that files remain PDF/A-compliant after modifications. We also added APIs to determine the current PDF/A and PDF/UA compatibility state for a document and reset this state.

The following code snippet checks the PDF/A and PDF/UA state for a loaded PDF file, and resets compatibility settings:

  • C#
using DevExpress.Pdf;

PdfDocumentProcessor pdfProcessor = new PdfDocumentProcessor();
pdfProcessor.LoadDocument("document.pdf");
// Obtain current PDF/A and PDF/UA state
var pdfA = pdfProcessor.Document.PdfACompatibility;
var pdfUA = pdfProcessor.Document.PdfUACompatibility;
//Reset document compatibility
pdfProcessor.Document.ResetCompatibility();
 

#Custom Font Support for PDF Content

DevExpress PDF Document API now supports custom fonts from DXFontRepository when generating or updating PDF content. This enhancement ensures visual consistency across annotations, form fields, and digital signature appearances.

You can apply custom DXFontRepository fonts to:

  • Form fields (AcroForms) and annotations (FreeText, Redaction).
  • Digital signature appearance generated with PdfDocumentSigner.

NOTE

Custom font resolution applies only when you explicitly set the font name via the API.

 

Word Processing Document API

#Mail Merge Enhancements - Merge Data with Detail Regions

The mail merge engine used within the DevExpress Word Processing Document API supports nested regions. You can merge data with any number of hierarchical levels (master-detail-subdetail and beyond) within a single template. Existing MailMerge methods work for both single-level and multi-level documents, no additional settings/toggles required.

Use TableStart:RegionName and TableEnd:RegionName merge fields to mark regions that contain data from a single record (master or detail). Merge regions can be defined within paragraphs or tables. Regions placed in tables automatically expand the table with source data during the merge.

DevExpress Word Processing API - Mail Merge Enhancements

Additional Mail Merge and Field API enhancements:

The following code snippet merges data, and handles the MailMergeRecordStarted event to log the merge process:

  • C#
// Read JSON data to a database object
string dataPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nwind_data.json");
string json = File.ReadAllText(dataPath);
NWind? nwind;
nwind = JsonSerializer.Deserialize<NWind>(json);

// Create a RichEditDocumentServer instance
using var wordProcessor = new RichEditDocumentServer();

// Load the template into the word processor instance.
var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "template.docx");
wordProcessor.LoadDocument(templatePath);

// Create mail merge options.
MailMergeOptions myMergeOptions = wordProcessor.Document.CreateMailMergeOptions();

// Assign the data source.
myMergeOptions.DataSource = nwind?.Customers;

// Register event handlers to customize merge behavior (progress output and dynamic variables).
wordProcessor.MailMergeRecordStarted += WordProcessor_OnMailMergeRecordStarted;

// Execute the mail merge.
wordProcessor.MailMerge(myMergeOptions, "result.docx", DocumentFormat.Docx);


// Event handler outputs diagnostic info for each mail merge region
// and its sub-regions when a record merge starts.
void WordProcessor_OnMailMergeRecordStarted(object sender, MailMergeRecordStartedEventArgs e)
{
    var region = e.MailMergeRegionInfo;
    if (region != null)
    {
        Console.WriteLine($"Merging region: {region.Name}\r\n Merge Fields: {region.MergeFields.Count}");
        if (region.Regions != null && region.Regions.Count > 0)
        {

            foreach (var subRegion in region.Regions)
            {
                Console.WriteLine($" Sub-region: {subRegion.Name}\r\n Merge Fields: {subRegion.MergeFields.Count}");
            }
            Console.ReadKey();
        }
    }
}

Documentation

 

#PDF/UA Export - Form Field Tagging

DevExpress Word Processing Document API v25.2 automatically adds accessible tags to PDF form fields when users export Word documents with Content Controls to accessible PDF formats.

 

PowerPoint Presentation API

#PowerPoint Tables

We added support for PowerPoint tables. You can now upload and save PowerPoint presentations with tables and manage them programmatically (customize, read, delete, or create new tables from scratch). Table support includes the following features/capabilities:

  • Insert tables with a specified number of rows and columns.
  • Modify table location on a slide.
  • Insert, delete, and resize rows, columns, and cells.
  • Fill, modify, and clear table cell data.
  • Merge and split table cells.
  • Apply predefined themed table styles.
  • Manage styling for banded rows and columns, the first and last column, the header and total row.
  • Format individual cells - apply borders, shading, alignment, background fills and more.

DevExpress Presentation API - Tables

  • C#
using DevExpress.Docs.Presentation;

namespace PresentationApiSample;

public class Program {
    public static void Main(string[] _) {

        // Create an in-memory Presentation document
        Presentation presentation = new Presentation();
        presentation.Slides.Clear();

        // Create a blank slide and add it to the presentation
        Slide slide = new Slide(SlideLayoutType.Blank);
        presentation.Slides.Add(slide);

        // Create a 5x7 table (rows x columns) and add it as a shape to the slide
        Table table = new Table(5, 7);
        slide.Shapes.Add(table);

        // Populate table cell text (row, column) for demonstration
        table[0, 0].TextArea.Text = "Month";
        table[0, 1].TextArea.Text = "PM2.5 (µg/m³)";
        table[0, 2].TextArea.Text = "PM10 (µg/m³)";
        table[0, 3].TextArea.Text = "NO₂ (ppb)";
        table[0, 4].TextArea.Text = "O₃ (ppb)";
        table[0, 5].TextArea.Text = "CO (ppm)";
        table[0, 6].TextArea.Text = "AQI (Average)";

        table[1, 0].TextArea.Text = "January";
        table[1, 1].TextArea.Text = "42";
        table[1, 2].TextArea.Text = "78";
        table[1, 3].TextArea.Text = "28";
        table[1, 4].TextArea.Text = "18";
        table[1, 5].TextArea.Text = "0.9";
        table[1, 6].TextArea.Text = "120";

        table[2, 0].TextArea.Text = "February";
        table[2, 1].TextArea.Text = "35";
        table[2, 2].TextArea.Text = "65";
        table[2, 3].TextArea.Text = "25";
        table[2, 4].TextArea.Text = "22";
        table[2, 5].TextArea.Text = "0.8";
        table[2, 6].TextArea.Text = "105";

        table[3, 0].TextArea.Text = "March";
        table[3, 1].TextArea.Text = "30";
        table[3, 2].TextArea.Text = "58";
        table[3, 3].TextArea.Text = "20";
        table[3, 4].TextArea.Text = "30";
        table[3, 5].TextArea.Text = "0.7";
        table[3, 6].TextArea.Text = "95";

        table[4, 0].TextArea.Text = "April";
        table[4, 1].TextArea.Text = "25";
        table[4, 2].TextArea.Text = "52";
        table[4, 3].TextArea.Text = "18";
        table[4, 4].TextArea.Text = "40";
        table[4, 5].TextArea.Text = "0.6";
        table[4, 6].TextArea.Text = "85";

        // Specify the table style
        table.Style = new ThemedTableStyle(TableStyleType.LightStyle1Accent4);
    }
}

Documentation

 

#New Formats

The DevExpress PowerPoint Presentation API allows you to upload and save presentations in the following formats (in addition to PPTX):

  • PPTM (PowerPoint Macro-Enabled Presentation)
  • POTX (PowerPoint Template)
  • POTM (PowerPoint Macro-Enabled Template)

Pass a DocumentFormat to the Presentation constructor or SaveDocument method to upload or save documents from/to the chosen format. All compatible document elements are preserved when you convert documents from one format to another.

  • C#
// Convert macro-enabled presentation to macro-enabled template
using var presentation = new Presentation(inputStream, DocumentFormat.Pptm);
var outputStream = new MemoryStream();
presentation.SaveDocument(outputStream, DocumentFormat.Potm);

Documentation

 

#Text Manipulation APIs - Search, Replace, Remove, Highlight

The following APIs allow you to search for text and replace/format matches across an entire presentation, individual slides, or specific shapes:

  • TextArea.FindText | Slide.FindText | Presentation.FindText
  • TextArea.ReplaceText | Slide.ReplaceText | Presentation.ReplaceText
  • TextArea.RemoveText | Slide.RemoveText | Presentation.RemoveText
  • TextArea.ModifyTextProperties | Slide.ModifyTextProperties | Presentation.ModifyTextProperties

Documentation:

 

#Themes

New theme APIs allow you to read, apply, and modify PowerPoint themes programmatically. With these APIs, you can:

  • Read and apply existing presentation themes.
  • Customize theme color palettes, effects, fonts, and background styles.
  • Override themes for individual slides or slide layouts.
  • Manage and update slide color maps.
  • C#
// Get the theme from the slide master
var myTheme = mySlideMaster?.Theme;

// Set theme name
myTheme.Name = "My Custom Theme Name";

// Configure accent colors
myTheme.ColorScheme.Accent1 = new OfficeColor(Color.Green);
myTheme.ColorScheme.Accent2 = new OfficeColor(HslColor.FromRgb(Color.Orange));
myTheme.ColorScheme.Accent3 = new OfficeColor(Color.Aqua);

// Add custom fill styles
List<Fill> themeFills = new List<Fill>() {
    new SolidFill(Color.Yellow),
    new SolidFill(Color.Cyan),
    new SolidFill(Color.Magenta)
};
myTheme.FormatScheme.Fills.ResetTo(themeFills);

// Add custom background fills
List<Fill> themeBackgroundFills = new List<Fill>() {
    new SolidFill(Color.Green),
    new SolidFill(Color.Red),
    new SolidFill(Color.Blue)
};
myTheme.FormatScheme.BackgroundFills.ResetTo(themeBackgroundFills);


// Set theme fonts
myTheme.FontScheme.MinorFont = new ThemeFont("Calibri", "Calibri Light", "Calibri");
myTheme.FontScheme.MajorFont = new ThemeFont("Comic Sans MS", "Comic Sans MS", "Comic Sans MS");

// Add custom line styles

List<LineStyle> lineStyles = new List<LineStyle>() {
    new LineStyle { Width = 50, DashType = LineDashType.Dot, Fill = new SolidFill(new OfficeColor(Color.Blue)) },
    new LineStyle { Width = 5, DashType = LineDashType.DashDot, Fill = new SolidFill(new OfficeColor(SchemeColors.Accent3)) },
    new LineStyle { Width = 5, DashType = LineDashType.DashDot, Fill = new SolidFill(new OfficeColor(SchemeColors.Accent3)) }
};

myTheme.FormatScheme.LineStyles.ResetTo(lineStyles);

// Create and configure a shadow effect
var effect1 = new ShapeEffectProperties {
    OuterShadow = new OuterShadowEffect() {
        RotateWithShape = false,
        BlurRadius = 18.75f,
        Distance = 6.25f,
        Angle = 90,
        HorizontalScaleFactor = 137,
        VerticalScaleFactor = 137,
        Color = new OfficeColor(Color.Black) {
            Transforms = {
        new AlphaColorTransform(63)
    }
        }
    }
};

myTheme.FormatScheme.Effects.ResetTo(new List<ShapeEffectProperties> { effect1 });

// Apply a themed background to the slide
slide.Background = new ThemedSlideBackground(2);

Documentation

 

#Rendering Enhancements

We refined our internal document layout engine to deliver more accurate rendering of PowerPoint presentation content. This update improves how text, shapes, and layout elements are measured and drawn when you print or export presentations to PDF.

 

Spreadsheet Document API

#Extended OLE Object Support

DevExpress Spreadsheet Document API library allows you to import/export linked and embedded OLE Objects in binary Excel formats (XLS and XLSB). You can create, edit, or remove OLE objects in Excel documents and save these document to binary formats without content loss.

 

XAF: Cross-Platform .NET App UI & Web API v25.2

.NET 10 and Visual Studio 2026 Support

XAF Blazor/WinForms UI and Web API Service now support .NET 10 and Visual Studio 2026.

Microsoft Downloads

 

XAF No Longer Supports Microsoft's .NET Framework

#WebForms/WinForms

As documented in our Roadmap (published in August 2025), v25.2+ marks the official end of XAF WebForms & WinForms .NET Framework support. We also removed all XAF .NET Framework and legacy .NET modules/APIs, and older/deprecated Security System implementations from our source code.

Moving forward, we will focus our efforts on .NET (Blazor & WinForms & Web API Service) and scalable, multi-tenant/SaaS-based apps. We will also ship security and other critical fixes for v25.1.XX minor builds (.NET Framework 4.8) for as long as we can.

Migration Guidelines | Future Plans

 

Cross-IDE Project and Item Template Kit

#.NET, Windows, macOS

With v25.2, DevExpress Template Kit is fully integrated into JetBrains Rider (including macOS support). You can create new projects and items using the same set of DevExpress templates already available in Visual Studio and VS Code.

The new Template Kit also ships with our Unified Component Installer and replaces our legacy XAF Solution Wizard. The "DevExpress 25.2 Template Kit" item is available within the following Visual Studio 2022+ dialogs:

  • File > New > Project
  • Add > New Item/Add > Class

Documentation

XAF Template Kit, DevExpress

 

XPO ORM - Connection Provider Updates

We now support the most recent versions of the following database engines (for both .NET and .NET Framework):

  • PostgreSQL 18.0
  • Microsoft SQL Server 2025

Documentation

 

Common Enhancements — Blazor UI

#Middle Tier Security: Official Release/RTM

XAF Blazor now supports Middle Tier Security for secure communication between the frontend and backend, helping to protect sensitive data and enforce stricter access controls.

General Security Considerations | Security-Related Blog Posts

 

#Fluent Themes and Icons: Official Release/RTM

We released Dark and Light Fluent Themes for XAF Blazor v25.2 and expanded our SVG icon pack with colorful XAF-specific icons that match the Fluent Theme and its dark/light palettes.

You can now set the Primary Accent Color using our Theme Chooser.

XAF ASP.NET Core Blazor Image Picker, DevExpress

XAF ASP.NET Core Blazor Theme Chooser, DevExpress

 

#Ribbon UI Support

With XAF v25.2, you can display the application main menu as a Ribbon UI (combined with a Tabbed MDI by default). Our implementation supports Ribbon UI command merge operations: XAF Controller's Actions are processed across main and detail form templates (just like our XAF WinForms implementation).

XAF ASP.NET Core Blazor Ribbon UI, DevExpress

Open the Model Editor and set the IModelOptionsBlazor.FormStyle property to Ribbon to activate this feature. You can use the new ActionDesign | ActionToRibbonMapping node to customize the Ribbon's structure.

XAF ASP.NET Core Blazor Ribbon Model Editor, DevExpress

 

#Native Blazor Filter Builder Integration (CTP)

v25.2 ships with our new CriteriaPropertyEditor (available as a Community Technology Preview). CriteriaPropertyEditor uses the new DevExpress Blazor Filter Builder component and supports simpler localization, better performance, and native Blazor themes/palettes.

You can manually activate and test the CriteriaPropertyEditor in the Model Editor or in code. We hope to replace our existing JS-based FilterPropertyEditor with the new CriteriaPropertyEditor in v26.1.

XAF ASP.NET Core Blazor Criteria Property Editor, DevExpress

 

Cross-Platform Enhancements

#Cross-Platform Property and List Editor Enhancements (XAF Blazor and WinForms UI)

v25.2 includes the official release of our TagBox, ComboBox, and Progress Bar Property Editors.

TagBox and checked ComboBox are two popular options if you need to save space in detail forms (for collection data and as an alternative to large data grids)

Progress Bar displays the progress of an operation in both List and Detail Views (now supports inline-editing).

TagBoxListPropertyEditor] | ComboBoxListPropertyEditor] | ProgressBarPropertyEditor]

XAF ASP.NET Core Blazor TagBoxListPropertyEditor, DevExpress

XAF ASP.NET Core Blazor ComboBoxListPropertyEditor, DevExpress

XAF ASP.NET Core Blazor ProgressBarPropertyEditor, DevExpress

 

#PDF Viewer Property Editors: Official Release/RTM

In our v25.1 release cycle, we introduced the PDF Viewer Property Editors as a Community Technology Preview (CTP) for XAF Blazor and XAF WinForms. v25.2 marks its official release, complete with new customization options designed to enhance usability and flexibility within your WinForms applications. New features include:

  • Customizable Ribbon and Toolbar. The WinForms PDF Viewer allows you to display the command interface as a Ribbon, Toolbar, or hide it entirely. You can also customize the available command set as requirements dictate.
  • Open in a Separate Window. A new context menu option opens the PDF Viewer in a standalone window for a more focused viewing experience.
  • PDF Field Editing. The WinForms PDF Viewer now allows you to edit fillable form fields and save these changes to the database.

XAF ASP.NET Core Blazor PDF Viewer, DevExpress

Documentation

 

#Simplified Access to Column Settings for Grid List Editors

You can write platform-agnostic code (see below) or access platform-specific column settings via ColumnWrapper descendants:

  • C#
protected override void OnViewControlsCreated() {
    base.OnViewControlsCreated();
    if (View.Editor is ColumnsListEditor listEditor) {
        foreach (var column in listEditor.Columns) {
            column.ShowInCustomizationForm = false;
        }
    }
}

Documentation

 

VCL Controls v25.2

Ready to evaluate DevExpress VCL v25.2?

Once you're ready to upgrade, simply login to the DevExpress Client Center and download the appropriate installer to proceed.

 

Download BETA and Install

 

RAD Studio 13 Support

VCL v25.2.1+ and v25.1.4+ officially support the most recent versions of RAD Studio (Delphi 13 and C++Builder 13 for both 32-bit and 64-bit compilers).

Support Deprecation: Delphi/C++Builder 10.3, 10.2, 10.1, 10.0

Embarcadero first released IDE version 10.0 a decade ago. With our most recent update (v25.2), our VCL libraries only support 10.4 Sydney and more recent versions of RAD Studio (11.3, 12.3, 13.vLast).

Refer to the following for additional information: Prerequisites: Supported IDEs, Frameworks, and SDKs.

 

ExpressReports – Official Release

This update marks the official release of our AI-enabled VCL Reporting Platform (ExpressReports). New features/capabilities include:

  • Subreport support
  • Report Parameters
  • UI Localization enhancements
  • Unified VCL backend and enhanced Dependency Management
  • Updated Demos and enhanced documentation

Documentation | FAQ

Subreports

Subreports allow you to embed a report into a parent report (to enhance modularity and flexibility of your report design). Each subreport represents as an independent/reusable report template layout, ideal for designing recurring document sections such as headers, footers, and cover pages. Subreports are specifally effective for constructing master-detail structures and merged or side-by-side reports.

AI-Powered Reports - A Subreport Template Example - VCL Components, DevExpress

 

Report Parameters

New report parameters allow you and your users to filter report data dynamically using a straightforward/intuitive interface.

AI-Powered Reports - A Report Designer Filter Editor Example - VCL Components, DevExpress

AI-Powered Reports - A Parameter Editor Example - VCL Components, DevExpress

VCL v25.2 also makes it easier to access and customize report parameters using Delphi/C++Builder code at the TdxReport and TdxReportParameter level (for instance, to specify initial values or switch between visibility/readonly states).

  • Delphi
uses
  dxReport,
  dxReport.Parameters;
// ...

var AParameter: TdxReportParameter;
    dxReport1: TdxReport;
// ...
    AParameter :=  dxReport1.Parameters['ProductID'];
    AParameter.Value := 1978;
    AParameter.Visible := False;
    AParameter.Enabled := True;
// ...
 

UI Localization Enhancements

With v25.2, DevExpress VCL Report Designer/Report Viewer UI elements can be fully localized (form headers, inner controls, etc.). You can also localize report documents using AI-powered extensions or our built-in Localization Editor (available within the Report Designer).

AI-Powered Reports - A Localized Report Designer Example - VCL Components, DevExpress

 

Unified VCL Backend and Enhanced Dependency Management

We refactored our shared ASP.NET Core-based backend to support both ExpressReports and BI Dashboard components. All dependencies are now managed via Central Package Management (CPM) across our .NET and JavaScript product lines. For additional information on the DevExpress VCL backend andits hybrid/web-based architecture, please refer to the following FAQ.

You can review our code to learn more about modern hybrid/web-based design. Full VCL backedn and WebView-related client-side code is available locally if you own the DevExpress VCL Subscription+. Local source is generally installed in the following directory: c:\Users\Public\Documents\DevExpress Demos 25.1\Components\Reporting\CS\VCLReportBackend\

To review .NET/JS source code:

Unified VCL Backend - VCL Backend Sources - VCL Components, DevExpress

 

Demo and Documentation Enhancements

Our ExpressReports compiled demo now includes additional modules for Subreports, Report Parameters, and other v25.2-specific features. We also added new GitHub examples for key usage scenarios:

  • Edit report templates at runtime using the End-User Report Designer and store these templates in a file system (GitHub).
  • Preview database-stored report templates within the app UI (GitHub).
  • Filter a report data source based on currently selected grid reports (GitHub).
  • Localize Report Viewer and Designer UI elements (GitHub).
 

A Preview of the Business Intelligence Dashboard (ExpressDashboards)

Our Delphi/C++Builder product line now includes a new VCL BI Dashboard (aka ExpressDashboards). ExpressDashboards is available as a Community Technology Preview (CTP).

Much like ExpressReports, DevExpress VCL Dashboard leverages our JavaScript Dashboard Designer and Viewer for native VCL apps (using modern web-based design capabilities via WebView and ASP.NET Core/JavaScript wrappers). All required .NET and JavaScript dependencies are embedded into a single self-contained EXE file. As such, you can use Delphi/C++Builder for many dashboard-specific customizations.

You can display/design BI dashboards either in modal full-screen mode or as an embedded/ad-hoc control on a form. Database, file system, and other dashboard template storage options are supported.

TIP: Our new DevExpress VCL BI Dashboards requires one of the following subscriptions – our new VCL Subscription+ or an existing active VCL Subscription within the Universal Subscription (includes DevExpress BI Dashboards).

Refer to the following blog post for additional information in this regard: New VCL Subscription for Delphi/C++Builder: Modern Web & Reporting Solutions.

Documentation | FAQ

VCL BI Dashboards - A Dashboard Control Example - VCL Components, DevExpress

VCL BI Dashboards - A Dashboard Designer Dialog Example - VCL Components, DevExpress

Accessibility, UI Automation, and Keyboard Navigation

VCL v25.2 includes accessibility (A11Y) enhancements for the following DevExpress VCL UI components:

  • VCL Data Grid: Added group row support and additional control over cell data announcement.
  • VCL Tree List: Key navigation support, read-only, and partial data editing usage scenarios (without complex interactions).
  • Most popular VCL Data Editors: Key usage scenarios for both in-place and standalone editors.

Full VCL accessibility support is a significant undertaking and requires substantial development resources. We are committed to improve accessibility support for the DevExpress VCL Scheduler, Pivot Grid, remaining Data Editors (and other controls) throughout 2026.

Documentation

Artificial Intelligence (AI) Enhancements

v25.2 introduces AI-powered Smart Paste within the DevExpress VCL Data Grid and Layout Control. Smart Paste analyzes content and intelligently assigns correct values to appropriate layout fields or row cells (to transform traditional copy-and-paste operations):

VCL AI Support - A Smart Paste Example - VCL Components, DevExpress

SmartCore AI Component Pack Integration

As you know, Embarcadero released brand new SmartCore AI Components shipped through the GetIt package manager. At present, the SmartCore AI platform is under active development. Once SmartCore APIs reach a production-ready state, we will integrate them into our AI-powered commands for native VCL controls. In the meantime, review the following integrations:

TIP: VCL developers can use SmartCore AI Components, connect third-party libraries, or implement custom support for different AI providers (GitHub Example).

Documentation

 

DevExpress MCP Server for AI-powered Documentation Access

We introduced an MCP server that connects GitHub Copilot Chat, Cursor, and other MCP-compatible AI tools directly to our comprehensive documentation database. The server provides instant access to over 300,000 help topics through natural language queries within your IDE. This allows you and AI coding agents such as Claude Code to access current DevExpress documentation directly within the AI assistant's context.

Refer to the following help topic for additional information: DevExpress Documentation MCP Server: Configure an AI-powered Assistant.

DevExpress MCP Server - VCL Components, DevExpress

 

Easier SVG Assignment for Image Lists at Design Time

Since our v24.1 release, the DevExpress VCL Ribbon allows you to use a single image list for large and small SVG icons. VCL v25.2 adds this capability to the following components:

You can now configure large/small SVG icon settings for these components using new SVGOptions properties:

SVG Icon Management - New SVG Image Options - VCL Components, DevExpress

NOTE: Existing apps and usage habits will remain unaffected.

PDF Viewer Content Rendering Enhancements

BlendImage Support

We introduced BlendImage functionality with Darken and Multiply blend modes (additional modes will be added at a later time). You can now combine two images using multiple blending techniques.

Enhanced Gradient Rendering

We enhanced gradient rendering for image-to-fill and fill-to-image usage scenarios.

Optimized Embedded File Handling in PDF

We fixed issues related to nested PDF file embedding (for example, when a PDF contains another PDF). Additionally, binary data processing is now significantly faster because the parser no longer needs to pre-read embedded PDF data.

JBIG2Image Mask Support

Added support for predefined image masks in the JBIG2Image decoder. With v25.2, the JBIG2Image decoder supports predefined image masks and ensures correct rendering of PDF images that use mask data.

ColorSpaceName Persistence

We improved ColorSpaceName handling during document save operations to guarantee accurate color rendering.

Advanced Printing Features

When printing non-AsImage content, you can now print semi-transparent images or images with masks directly onto the printer canvas.

Shading Enhancements

Masks and transformation matrices are now applied correctly to final image output.

PNG Decoder Performance

Thanks to our optimized PNG decoder, you can expect up to a 30x speed improvement in certain decoding scenarios. Overall rendering performance has increased by 2–5x across multiple document types.

Text Rendering in TextClip Mode

Documents can now display multi-colored text, apply text fill effects, and overlay images on text. ClearType and Antialiasing at low DPI improve text rendering quality (compared to traditional clipping for small font sizes).

Enhanced HighDPI Support, Stability, and Performance

Hundreds of Quality Fixes

We continue to focus our efforts on quality bug fixes, performance and usability enhancements (especially for High DPI-related scenarios and vector skins). Refer to the following web page for a full list of enhancements in this regard: ~200 bug fixes and minor enhancements between VCL v25.1 and v25.2.

Faster Rendering of Vector Skin Elements

v25.2 introduces performance-related enhancements for VCL apps running on 4K and other high-resolution displays. We optimized caching algorithm used for SVG images (applies to all vector-based skins):

  • Approximately 20% rendering speed gains for apps using WXI/WXI Compact skins. Up to 10% performance improvement for other vector skins.
  • Up to 10-15% speed gain for UI element resize operations and reduced form flickering (especially noticeable with RibbonStatusBar-based forms).
  • Up to 60% rendering speed gain for complex form layouts using multiple editors in different states (disabled, read-only, etc.).
 
What's New in v25.2

Ready to Evaluate v25.2?

 

With numerous new products and dozens of high-impact features, v25.2 allows you to build your best, without limits
or compromise. Download our fully-functional 30-day trial today and experience the DevExpress difference today.

 

Download The Beta*

 

* Active Universal or DXperience subscription is required

DevExpress What's New History

Explore our Release History

Learn more about new controls, features, and enhancements across supported platforms (.NET Framework, .NET Core, JavaScript, and VCL) introduced in our previous major updates.

What's New in v24.2
What's New in v24.1
What's New in v23.2
Version History
Automatic Upgrade of .NET and External Dependency Versions

Automatic Upgrade of .NET and External Dependency Versions

New automation features in DevExpress v24.2 streamline .NET and third-party dependency upgrades. Our Project Converter now supports one-click conversion to .NET 8 and .NET Framework 4.6.2, automatically updating both DevExpress and compatible third-party packages.

Read the blog post
DevExpress AI-Powered Extensions

DevExpress AI-Powered Extensions

v24.2 brings advanced AI capabilities (such as smart autocompletion, tone adjustment, summarization, translation, and more) to DevExpress text editors for WinForms, WPF, and Blazor. With support for multiple AI services, including OpenAI, Azure OpenAI, and self-hosted models, you can now explore the full potential of NLP in your applications.

Read the blog post