Skip to main content
All docs
V25.2
  • v25.2 Release Notes

    • 14 minutes to read

    Tip

    Visit our website to explore new features/capabilities available across the entire DevExpress product line: What’s New in our Latest Update.

    .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.

    JetBrains 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 - WinForms Chart Control, DevExpress

    Accessibility Enhancements

    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:

    Action Keyboard Shortcut Notes
    Focus a column header Ctrl+Shift+TAB Focus moves from any row to header row.
    Unfocus a column header Focus returns to the grid’s top row.
    Unfocus a column header Ctrl+TAB Focus 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, END Moves focus across column headers/bands.
    Resize column/band width Shift+ / Shift+ Decreases/increases column/band width.
    Reorder columns/bands Ctrl+, Ctrl+, Ctrl+, Ctrl+ Moves a column header/band horizontally or vertically based on layout.
    Sort by the focused column Space, Enter Applies sorting in ascending order or reverses sort order. Fires StartSorting / EndSorting.
    Add/remove a column to/from multi-column sorting Shift+Space, Ctrl+Space Adds to or removes from existing sort sequence.
    Open a column filter popup Alt+, F4 Fires FilterPopup-related events.
    Open a column/band context menu Shift+F10, (Context Menu) Fires PopupMenuShowing, GridMenuItemClick.

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

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

    Property Name Description
    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.

    Read Tutorial: Keyboard Navigation

    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 Enhancements

    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.

    Multiple Chat Clients in a WinForms Application, 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:

    // 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:

    // 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
    };
    

    Read Tutorial: Manage Multiple Chat Clients

    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.

    Resource - WinForms AI CHat Control, DevExpress

    Supported resource content types:

    • Plaint 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

    Read Tutorial: Resources

    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.

    Tool Calling - WinForms AI Chat Control, DevExpress

    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.

    Read Tutorial: AI Tool Calling Run Demo: AI Tool Calling

    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.

    Tool Call Visualization

    A new ResponseReceived 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:

    void AiChatControl1_ResponseReceived(object sender, AIChatControlResponseReceivedEventArgs 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 — Customize Chat UI and Appearance

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

    Customize Chat Messages - WinForms AI Chat Control, DevExpress

    Read Tutorial: Message Templates Read Tutorial: Prompt Suggestion Template

    Title and Clear Chat Button

    AIChatControl 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 AIChatControl, 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 AIChatControl, 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

    Read Tutorial: Chat-Based Project Templates

    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.

    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.

    Prompt to Expression - WinForms Data Grid, DevExpress

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

    Prompt to Expression - WinForms UI Controls, DevExpress

    Supported controls:

    • GridControl
    • TreeList
    • VGridControl

    Read Tutorial: Prompt to Expression Run Demo: Prompt to Expression

    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, DevExpress

    Run Demo: AI-powered SmartPaste

    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:

    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; 
    });
    

    Read Tutorial: SmartPaste from Clipboard Image

    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):

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

    Read Tutorial: Prompt Augmentation

    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.

    Outlook-inspired Side Panel

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

    WinForms RibbonForm - Outlook-inspired Side Panel, DevExpress

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

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

    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;
        }
    }
    

    Run Demo: Outlook-Inspired Application

    Generate Skin Palettes with AI

    Our new demo application leverages AI to create custom skin palettes to personalize an application’s appearance on the fly. Users can generate, save, and delete AI-created palettes between application sessions.

    View Example: Generate Skin Palettes with AI

    Generate Skin Palettes with AI - DevExpress WinForms Controls

    Multi-Cell Editing — Data Grid & TreeList

    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.

    WinForms Grid - Multi-Cell Editing, DevExpress

    Activation steps:

    1. Set the OptionsSelection.MultiSelect property to true.
    2. Attach MultiCellEditBehavior to the target control.
    using DevExpress.XtraEditors;
    public class Form1 : XtraForm {
        public Form1() {
            InitializeComponent();
            // Activate multi-cell selection.
            gridView1.OptionsSelection.MultiSelect = true;
            // Create and attach a MultiCellEditBehavior.
            BehaviorManager bm = new BehaviorManager(this.components);
            bm.Attach<MultiCellEditBehavior>(gridView1);
        }
    }
    

    Run Demo: Cell Selection

    Search with a Delay in Accordion Control

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

    CSS Variables — SVG Icon Colorization

    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)
    <?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>
    

    Read Tutorial: SVG Icon Colorization

    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:

    // 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.

    Download 30-Day Trial

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

    Download: Free 30-day Trial

    Tip

    Your Feedback Matters! Take part in the survey on our website: WinForms Survey.

    See Also