v25.1 Release Notes
- 18 minutes to read
Tip
Visit our website to explore the latest features across the DevExpress product line: What’s New in the Latest Version.
License Keys — New in v25.1
This new release requires every developer/build machine to store a DevExpress license key associated with your account.
DevExpress Unified Installer (Windows) automatically obtains your License Key and places it into its correct location. Run the installer in Repair/Register mode to update your key when necessary. If you used our Unified Installer before license keys were introduced (before v25.1), you should not experience any changes when installing or updating DevExpress products.
If you bypass the DevExpress Unified Installer, you can download your license key and register it in the system manually (via a file on disk or an environment variable). Review detailed instructions in the following help topic: Online NuGet Feeds, CI/CD, and Other Installation Methods (Windows, macOS, Linux).
Accessibility
Keyboard Navigation in Backstage Navigation (Ribbon UI)
We added full keyboard navigation support to the WPF Ribbon Backstage View. Users can now navigate and interact with all Backstage elements (such as tabs, buttons, and menu items) without using a mouse. This enhancement improves accessibility and streamlines user workflows, especially for keyboard-centric business solutions.
Keyboard Navigation in DateNavigator and DateEdit
Our WPF DateNavigator and DateEdit controls now support keyboard navigation for all UI elements. When DateEdit is focused, press Alt+Down to activate the popup, then use the Down arrow to focus on the date area. You can navigate through dates using arrow keys, Shift+Tab to focus the header, and Tab to move between Today and Close buttons.
Improved Keyboard Navigation in Layout Control
We enhanced keyboard accessibility in our WPF Layout Control to deliver a more intuitive and efficient user experience:
Layout Control - Users can now expand and collapse layout groups using the keyboard. This offers faster navigation and improved accessibility, especially for complex layouts.
Tile Layout Control - Users can navigate between tiles using arrow keys and press Enter to trigger a tile’s associated action (fires the tile’s Click event). This feature streamlines interaction in tile-based UIs and improves usability for keyboard users.
Avalonia XPF
Avalonia XPF allows WPF projects to run on macOS and Linux. The Avalonia team has added support for DevExpress UI controls. We migrated some of our demos to leverage Avalonia to help you evaluate whether Avalonia XPF meets your cross-platform development needs.
Note
Important Considerations
Avalonia XPF was not developed by DevExpress. Support for DevExpress controls is managed by the Avalonia team. You can find a list of known limitations here: Supported DevExpress Components.
Avalonia XPF is different from Avalonia UI. While Avalonia XPF enables WPF applications to run on macOS and Linux, Avalonia UI is a separate framework for building cross-platform apps from the ground-up. DevExpress components do not support Avalonia UI.
Performance Enhancements
Our Lightweight (LW) Themes significantly reduce view load time and memory consumption. In v25.1, we reworked our Demo Center modules to help you evaluate performance improvements across our WPF controls. We refactored demos, used lightweight themes, and resource preloading.
.NET 9 Enhancements
Drag & Drop Between Apps
Microsoft removed BinaryFormatter from .NET 9 for security reasons. Standard drag & drop operations between DevExpress WPF controls within a single application continue to work as expected (no changes are required on your end). Internally, our WPF controls no longer rely on BinaryFormatter
for these scenarios.
If your solution relies on multi-application drag & drop operations, you will need to serialize and deserialize data manually. You can use JsonSerializer
and handle drag events as described in the following topic: Implement Drag & Drop with JsonSerializer.
While it is technically possible to revert to previous behavior by installing the BinaryFormatter compatibility package, we strongly discourage this approach due to its known security risks.
Please refer to the following Breaking Change advisory for additional information in this regard: Changes due to the deprecation of Microsoft’s BinaryFormatter.
Windows 11 Colors
System and Accent Color Support
To maintain visual consistency between your app and the operating system, DevExpress Win11 Lightweight themes can automatically select accent color based on a user’s system settings. To enable this capability, activate CompatibilitySettings.UseLightweightThemes and specify the ApplicationThemeHelper.ApplicationThemeName property:
using DevExpress.Xpf.Core;
// ...
public partial class App : Application {
static App() {
CompatibilitySettings.UseLightweightThemes = true;
ApplicationThemeHelper.ApplicationThemeName = LightweightTheme.Win11SystemColors.Name;
//...
}
}
Lightweight Themes
Set Theme-Specific Values in XAML
Our new LWThemeValue
markup extension helps you design views for multiple DevExpress themes. LWThemeValue
allows you to set a property based on the current theme in XAML. You can assign it a specific value or a static resource.
<Window.Resources>
<SolidColorBrush x:Key="office2019Color" Color="Green"/>
<SolidColorBrush x:Key="win11Color" Color="Red"/>
</Window.Resources>
<Border Margin="{LWThemeValue Office2019='0,0,0,0', Win11='8,8,8,8'}"
CornerRadius="{LWThemeValue Office2019=0, Win11=4}"
BorderBrush="{LWThemeValue Office2019={StaticResource office2019Color}, Win11={StaticResource win11Color}}"
BorderThickness="1">
<!--...-->
</Border>
You can also group theme-dependent resources into dictionaries and dynamically apply them using the LWThemeDictionary class.
<!-- Dictionary1.xaml -->
<ResourceDictionary ...>
<SolidColorBrush x:Key="myBrush">Red</SolidColorBrush>
</ResourceDictionary>
<!-- Dictionary2.xaml -->
<ResourceDictionary ...>
<SolidColorBrush x:Key="myBrush">Blue</SolidColorBrush>
</ResourceDictionary>
<UserControl ...>
<UserControl.Resources>
<LWThemeDictionary Default="Resources/Dictionary1.xaml" Win11="Resources/Dictionary2.xaml">
</UserControl.Resources>
<Border Background="{DynamicResource myBrush}"/>
</UserControl>
New AI Chat Control
Our new AI Chat Control allows you to incorporate an interactive, Copilot-inspired chat-based UI within your WPF application. This AI-powered control leverages BlazorWebView
and reuses the DevExpress Blazor AI Chat component (DxAIChat).
Note
To use the WPF AIChatControl
you must have one of the following active subscriptions: Universal Subscription | DXperience Subscription | WPF and ASP.NET & Blazor. The DevExpress AI Chat Control can only be used in WPF applications that target the .NET 8+ framework.
Features include:
- Seamless Integration with AI Services
- Markdown Message Rendering
- Copy and Regenerate Responses
- Manual Handling of Chat Messages
- Leverage OpenAI Assistant to Chat with Your Own Data
- Save and Load Chat History
- Prompt Suggestions
- File Attachments
- Streaming
- Stop Response
- DevExpress Light and Dark Themes
See the following help topic for more information: AI Chat Control.
New AI-powered Extensions
Semantic Search (Data Grid)
Our WPF Data Grid now supports an enhanced, AI-powered search experience. Unlike traditional keyword-based search, semantic search leverages Natural Language Processing (NLP) to understand the meaning behind a query — not just exact words used.
Semantic search uses an embedding generator to convert text into numerical vector representations. Vector embeddings are stored in a vector store (for example, a database, in-memory collection, or a custom implementation that stores vector values in files). When a user enters a search query, the search engine computes similarity scores between the query vector and stored data vectors to return the most relevant results.
Once AI-driven semantic search is enabled, a dropdown button appears within the search box. The popup menu allows users to specify the desired search mode:
- Standard - traditional keyword-based search.
- Semantic - vector-based semantic search to find conceptually similar items.
- Hybrid - a combination of standard and semantic search.
Semantic search can operate in two modes:
- Filter Mode - Displays only matching records.
- Search Mode - Highlights relevant data rows for more intuitive data discovery.
See the following help topic for more information: Semantic Search.
Smart Search (Ribbon and Accordion)
DevExpress WPF Ribbon and Accordion controls now support AI-powered search. Smart Search works alongside traditional search algorithms to deliver a more powerful and user-friendly search experience.
When a user pauses text entry in the search field (within the Ribbon or Accordion control), the control sends the current search query to an AI service that understands context, synonyms, and user intent beyond exact keyword matches. Once the AI service returns results, the control filters items accordingly.
Smart Paste (Data Grid and Layout Control)
Smart Paste is an AI-ready feature that transforms traditional copy-paste operations. We first introduced this AI-powered feature in our WinForms Data Grid and Layout Control in December 2024. v25.1 extends this functionality to our WPF Data Grid, TreeList, and Layout controls.
When Smart Paste is activated, the “Smart Paste” command is automatically added to a control’s popup menu. When a user copies data from a source (such as a spreadsheet, document, or web page) and pastes it into a Data Grid or Layout Control-powered form, Smart Paste automatically interprets content and maps data to correct data fields or cells.
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 WinForms application.
AI Assistant (PDF Viewer)
You can now utilize AI-powered Summarize, Translate, and Ask AI features when using the DevExpress WPF PDF Viewer. You can desired AI operation using the PDF Viewer’s context menu.
AI-powered behaviors for the DevExpress WPF PDF Viewer have the same prerequisites and leverage the same integration mechanisms as other AI extensions in our product line: DevExpress AI-powered Extensions for WPF.
Data Grid & TreeList
Multi-Cell Editing for Selected Rows
We introduced multi-cell editing in December 2024, allowing users to apply the same value to multiple selected cells simultaneously. Previously, this feature required multi-cell selection to be enabled.
In v25.1, we improved batch-editing workflow. Multi-cell editing now also supports multiple row selection. Users can use this feature whether they select cells or entire rows.
To enable this feature, set the TableView.MultiCellEditMode property to MultiCellEditMode.FocusedColumn
:
<dxg:GridControl x:Name="grid"
ItemsSource="{Binding Path=Invoices, Source={StaticResource NWindDataLoader}}"
SelectionMode="Row">
<dxg:GridControl.View>
<dxg:TableView x:Name="defaultView"
MultiCellEditMode="FocusedColumn"/>
</dxg:GridControl.View>
</dxg:GridControl>
Per-Column Control of Editor Button Visibility
In v25.1, we added the EditorButtonShowMode property to the ColumnBase
class. This property allows you to override the EditorButtonShowMode global setting for individual columns.
<dxg:GridColumn FieldName="BirthDate"
EditorButtonShowMode="ShowAlways">
<dxg:GridColumn.EditSettings>
<dxe:DateEditSettings Mask="R"
MaskType="DateOnly"
DisplayFormat="R"/>
</dxg:GridColumn.EditSettings>
</dxg:GridColumn>
Options include:
ShowOnlyInEditor
- Only displays the button(s) when the cell editor is active.ShowForFocusedCell
- Only displays the button(s) within the focused cell.ShowForFocusedRow
- Displays the button(s) for a cell in the focused row.ShowAlways
- Displays buttons for all cells within a column.
Column-Level Control for Immediate Data Posting
We added the EnableImmediatePosting
property to the ColumnBase
class, allowing you to control when edited values are posted to the data source at the column level.
Previously, this behavior was only configurable at the view level (DataViewBase.EnableImmediatePosting). In v25.1, you can override the global setting per column to fine-tune data update behavior based on your preferences.
Outlook-inspired Side Panels
Our WPF Ribbon Control now supports side panel layouts inspired by Microsoft Outlook. With the new RibbonControl.SupportSidePanels property you can display side elements (such as an AccordionControl
) to the left or right edge of your application window - or display both elements/panels simultaneously.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<dxa:AccordionControl Grid.RowSpan="2">
<!--Configure the AccordionControl as needed.-->
</dxa:AccordionControl>
<dxr:RibbonControl SupportSidePanels="True"
Grid.Column="1">
<!--Configure the RibbonControl as needed.-->
</dxr:RibbonControl>
</Grid>
Map Control
Azure Maps Support
The DevExpress WPF Map Control can now utilize Azure Maps data using the following new data providers:
- Azure Geocode Data Provider - Obtains geographical coordinates for a location based on address
- Azure Search Data Provider - Searches for locations using a specified address or keyword
- Azure Traffic Incident Data Provider - Obtains information about traffic incidents and displays incident icons on the map
- Azure Route Data Provider - Calculates a route between specified origin and destination points, passing through selected waypoints
- Azure Route Isochrone Data Provider - Calculates an isochrone and displays areas reachable from a specific location
Note
When using Azure Maps, you must read and understand Microsoft’s terms of use: https://azure.microsoft.com/en-us/pricing/details/azure-maps/
The following demos have been updated to use new Azure Maps Data Providers. We encourage you to examine our implementation to streamline your transition to Azure Maps:
- Gpx Data Adapter
- Photo Gallery
- Sales Dashboard
- Clustering
- Map Editor
- Multiple Layers
- Map Elements
- Vector Item Binding
- Bubble Charts
- Coordinate Systems
- Items Moving
- Geo Shape Image
PDF Viewer
Preserve Compressed Object Streams when Saving
In previous versions, DevExpress PDF processing tools supported compressed object streams only when reading documents.
To reduce file size when saving PDF documents, v25.1 includes a new compression engine that preserves the original/compressed state of PDF object streams. Our compression mechanism automatically applies to multiple document structures (text, PDF forms, fonts, etc) and allows you to modify and save PDF files more efficiently.
PDF Redaction API
v25.1 includes new APIs to create and manage PDF redaction annotations. With this capability, you can hide/remove sensitive or private content from your documents and add a colored text overlay across the redacted area.
The redaction process includes two steps:
Create a redaction annotation with the desired appearance in the PDF page area (or value if you wish to hide content but retain it for other users).
Clear content using the annotation and apply the overlay with specified appearance settings. In this instance, all hidden content will be removed.
Note
Redaction is available using the PDF Facade API (DevExpress.Pdf.PdfDocumentFacade class). This class is defined in the DevExpress.Docs.v25.1.dll assembly. Add this assembly to your project or install the DevExpress.Document.Processor Nuget Package from the offline Package source to use PdfDocumentFacade
members.
You need an active license for the DevExpress Office File API Subscription or DevExpress Universal Subscription to use this class in production code.
Create and Apply Redaction Annotations in Code
To create a redaction annotation, you must:
Use the PdfViewerControl.GetDocumentFacade extension method to obtain a DevExpress.Pdf.PdfDocumentFacade instance.
Retrieve the required PDF page from the PdfDocumentFacade.Pages collection.
Call the PdfPageFacade.AddRedactAnnotation method. This method returns a PdfRedactAnnotationFacade object that you can use to modify the appearance of the redaction annotation: background color, overlay text, text font settings (font name, color, size, and style), text repetition and alignment.
New API allows you to apply the following annotations:
Single redaction annotation: PdfRedactAnnotationFacade.Apply
All redaction annotations for a specific page: PdfPageFacade.ApplyRedactAnnotations
All redaction annotations across the entire document: PdfDocumentFacade.ApplyRedactAnnotations
You can also use DevExpress.Pdf.PdfClearContentOptions to specify the type of the content to remove (text, graphics, images, or annotations) when you apply the redaction.
pdfViewer.LoadDocument("Demo.pdf");
//...
PdfDocumentFacade documentFacade = pdfViewer.GetDocumentFacade();
PdfRectangle pageCropBox = pdfViewer.GetPageInfo(0).CropBox;
PdfRectangle redactBounds =
new PdfRectangle(0, pageCropBox.Height-50, 200, pageCropBox.Height);
// Add a redaction annotation at the top left corner of the first document page.
PdfRedactAnnotationFacade redactAnnotation =
documentFacade.Pages[0].AddRedactAnnotation(redactBounds);
redactAnnotation.Author = "Jane Doe";
// Setup redaction annotation appearance
redactAnnotation.FillColor = new PdfRGBColor(0, 0, 0);
redactAnnotation.FontColor = new PdfRGBColor(1, 1, 1);
redactAnnotation.FontName = "Calibri";
redactAnnotation.FontSize = 0; // enables font auto-size
redactAnnotation.OverlayText = "Classified";
redactAnnotation.TextJustification = PdfTextJustification.Centered;
redactAnnotation.RepeatText = false;
// Apply the redaction annotation.
redactAnnotation.Apply();
Spreadsheet Control
OLE Objects
The DevExpress WPF Spreadsheet Control now supports OLE objects. OLE (Object Linking and Embedding) allows you to link external files and embed data (spreadsheets, PDF files, mail messages, presentations, etc.) into your Excel documents.
With OLE Object support, you can execute the following operations:
Create OLE objects with links to external files or embed data from these files in your document;
Obtain OLE object properties;
Extract OLE object data from a document;
Remove OLE objects from a document;
Print and export documents with OLE object icons to PDF/image formats;
Load and save documents that contain OLE objects without content loss.
An OLE object is represented by the OleObject interface. As a unique document shape, the OLE object inherits all the settings from the base Shape interface. The shape settings define OLE object’s icon appearance, location, and internal object properties (including name, icon size, icon position in a worksheet, alt text, and etc).
To access OLE objects in a worksheet, use the Worksheet.OleObjects collection (also available through the base Worksheet.Shapes collection). OleObjectCollection.AddLinkedOleObject and OleObjectCollection.AddEmbeddedOleObject methods allow you to create new linked or embedded OLE objects in a worksheet.
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
CellRange oleIconRange = worksheet.Range["B4:D6"];
SpreadsheetImageSource oleIcon = SpreadsheetImageSource.FromFile("oleIcon.png");
// Create linked OLE object.
OleObject oleObjectLinked = worksheet.OleObjects.AddLinkedOleObject(
oleIconRange, "package.pdf", OleObjectType.Package, oleIcon);
// Create embedded OLE object from a byte array.
byte[] sourceData = File.ReadAllBytes("package.pdf");
OleObject oleObjectEmbedded1 = worksheet.OleObjects.AddEmbeddedOleObject(
oleIconRange, sourceData, OleObjectType.Package, oleIcon);
// Create embedded OLE object from a file stream.
using (var stream = File.OpenRead("package.pdf")) {
OleObject oleObjectEmbedded2 = worksheet.OleObjects.AddEmbeddedOleObject(
oleIconRange, stream, OleObjectType.Package, oleIcon);
}
You can also extract and analyze linked and embedded data. Use the OleObject.InsertType property to determine OLE object type (linked or embedded). OleObject.AsLinkedContent and OleObject.AsEmbeddedContent methods allow you to extract additional information based on OLE object type. For linked objects, you can obtain the linked file name using the OleObjectLinkedContent.FileName property. For embedded objects, you can get raw binary content using the OleObjectEmbeddedContent.GetRawData method or save the embedded content to a file using the OleObjectEmbeddedContent.SaveAs method.
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
OleObject oleObject = worksheet.OleObjects[0];
if(oleObject.InsertType == OleObjectInsertType.Linked)
{
OleObjectLinkedContent linkedContent = oleObject.AsLinkedContent();
string linkedFileName = linkedContent.FileName;
}
if(oleObject.InsertType == OleObjectInsertType.Embedded)
{
OleObjectEmbeddedContent embeddedContent = oleObject.AsEmbeddedContent();
byte[] oleRawData = embeddedContent.GetRawData();
if (oleObject.Type == OleObjectType.AdobeAcrobatDocument)
using (FileStream stream = new FileStream("embedded_document.pdf", FileMode.Create, FileAccess.Write))
embeddedContent.SaveAs(stream);
}
You can also remove OLE objects from your spreadsheets. Use the OleObject.Delete, OleObjectCollection.Remove or OleObjectCollection.RemoveAt method to remove individual OLE objects, or use the OleObjectCollection.Clear method to remove all OLE objects from a worksheet.
OleObject oleObject = worksheet.OleObjects[0];
// Remove the current OLE object.
oleObject.Delete();
// or
worksheet.OleObjects.Remove(oleObject);
// Remove all OLE objects in the collection.
worksheet.OleObjects.Clear();
Note
OLE object support is only available in OpenXML-based file formats (XLSX, XLSM, XLTX, and XLTM).
See the following help topic for more information: OLE Objects in Spreadsheet Control for WPF.
How to: Use RichEditControl for WPF to Create a Fillable PDF Form in Code
Rich Text Editor
Right-to-Left (RTL) Engine Enhancements
We enhanced our Right-to-Left text rendering engine (improved text order in paragraphs, headers and footers, numbering lists, tables and shapes with bi-directional text including mixed Right-to-Left and Left-to-Right text blocks).
Available when you generate a PDF file, image, or print output via the User Interface or code.
CJK (Chinese, Japanese and Korean) Text Wrapping
We’ve added CJK text wrapping and line-break rule support to the DevExpress WPF Rich Text Editor.
New wrapping rules correctly apply line breaks between individual CJK characters (in document paragraphs, headers/footers, tables, and shapes). Documents that use CJK text wrapping rules can now be printed and exported to PDF/image formats with appropriate text layouts.
PDF Export - Convert Word Content Controls to PDF AcroForm Fields
Our Word Document to PDF export engine supports the conversion of Word content controls to PDF AcroForm fields.
DevExpress Word-processing tools automatically convert the following Microsoft Word content control types:
Plain Text
Rich Text
Picture
Check Box
Combo Box
Drop-Down List
Date Picker
Note
Building Block and Repeating Section controls are exported as regular text.
Due to PDF format limitations, PDF text fields generated from Rich Text content controls use formatting from the first word of the original Rich Text content control.
Rich Text content controls that split pages or contain complex objects (like tables) are exported as regular text.
To enable this capability, you must:
Load your Word file with content controls or generate content controls in your document using the DevExpress WPF Rich Text Editor.
Create a PdfExportOptions instance.
Enable the PdfExportOptions.ExportEditingFieldsToAcroForms property.
Call the ExportToPdf method with this
PdfExportOptions
object as a parameter.
You can also activate this capability via the Print Preview -> PDF Export Options
dialog.
using DevExpress.XtraPrinting;
using DevExpress.XtraRichEdit;
richEditControl.LoadDocument("input_content_controls.docx");
PdfExportOptions options = new PdfExportOptions();
options.ExportEditingFieldsToAcroForms = true;
richEditControl.ExportToPdf("output_with_acroform.pdf", options);
Compare Word Documents
v25.1 includes new APIs designed to compare two Word documents programmatically. With our new CompareDocumentExtensions.Compare
extension method you can:
Identify changes between two versions and generate document output with revisions.
Compare both document text and formatting (including case-sensitivity).
Compare content within document headers, footers and textboxes.
Setup author/date of output revisions.
Compare content at the word or character level.
Return the document along with revisions as a new Document instance for further processing (or automatically replace an input document with revised content).
Note
Input documents must not include document revisions. Otherwise, the Compare method throws an exception.
richEditControl.LoadDocument("FirstLook_original.docx");
Document originalDocument = richEditControl.Document;
RichEditDocumentServer wordProcessor = new RichEditDocumentServer();
wordProcessor.LoadDocument("FirstLook_revised.docx");
Document revisedDocument = wordProcessor.Document;
Document docWithRevisions = originalDocument.Compare(revisedDocument,
new CompareDocumentOptions() {
Author = "Jane Doe",
DateTime = DateTime.Now,
ComparisonLevel = ComparisonLevel.Word,
CompareCaseChanges = false,
CompareFormatting = true,
CompareHeadersAndFooters = true,
CompareTextBoxes = true
}, ComparisonTargetType.Original);
Note
The CompareDocumentExtensions.Compare
extension method is defined in the DevExpress.Docs.v25.1.dll assembly. Add this assembly to your project or install the DevExpress.Document.Processor NuGet Package from the offline Package source to use our CompareDocumentExtensions.Compare
method.
IMPORTANT
You need an active DevExpress Office File API Subscription or DevExpress Universal Subscription to use this class in production code.
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.
Tip
Your Feedback Matters! Take part in the survey on our website: WPF Survey.