.NET 7 Support

DevExpress UI controls/components, frameworks, and libraries now fully support the latest build of .NET 7.

.NET 7 support is available for the following product lines/platforms:

 

Read about .NET 7 Support

 

.NET 7 & Linux Support (CTP)

The DevExpress.Drawing library now utilizes our own cross-platform text and graphics rendering engine based on SkiaSharp. We enable the new engine automatically, once an application references the new DevExpress.Drawing.Skia assembly.

We also revised the public API of the following DevExpress products and implemented their cross-platform counterparts to support non-Windows platforms:

This enhancement will allow you to maintain the functionality of your applications that use the aforementioned DevExpress products when deployed to non-Windows environments with .NET 6/7 (primarily Linux and macOS).

Please review the following screenshot. Note the minor differences in how the same report (Export to Image) is displayed in apps deployed to .NET 7 & Ubuntu versus .NET Framework 4.6.1 and Windows.

 

.NET 7 and Linux Support, DevExpress

 

Blog Post

Visual Studio 2012/2013 Deprecation

We deprecated support for Visual Studio 2012 and 2013. Our demo apps now target .NET Framework 4.7.2 (.NET Framework 4.7.2 targeting pack is available in Visual Studio 2017, 2019, and 2022).

Demo app changes do NOT affect .NET Framework customers in any manner — our product assemblies will continue to target .NET Framework 4.5.2 in this release cycle (v22.2).

Blog Post

Installation & NuGet

Our Unified Component Installer includes an option to install localized resources for certain languages (DE, ES, JA). We will not install these resources by default – you can install them at your discretion.

Note: localized resources may be incomplete. Navigate to Localization Service to download community sourced localization for other languages.

 

DevExpress Unified Installer

WinForms Controls v22.2

#.NET 6.0/7.0 - Windows

v22.2 requires .NET 6 and Visual Studio 2022 (v17.0) or higher.

v22.2 supports .NET 7.0.

This does NOT affect .NET Framework customers in any manner — our product assemblies will continue to target .NET Framework 4.5.2 in this release cycle (v22.2).

 

#Skins and Vector Icons

New Office Palettes for WXI Skin

We designed new Office-inspired palettes for our Windows 11-inspired WXI skin. These include:

  • Office White
  • Office Colorful
  • Office Dark Gray
  • Office Black

Blog Post

 

New Office Palettes for WXI Skin - WinForms Controls | DevExpress

 

#UI Templates (EAP)

DevExpress UI Templates were designed to increase productivity for both new and experienced developers (built specifically for the Windows Forms platform). With templates, you can add elegant UI forms such as Log-in, Sign-up, Card Payment, and Address forms to your WinForms project in minutes.

 

Winforms UI Templates, DevExpress

 

Note: this EAP is available to active Universal subscribers and is provided solely for early testing purposes (C# only).

 

What's Inside

This EAP is limited to 25 templates and includes UI forms, buttons, group controls, standalone data editors, and predesigned side-by-side master-detail CRUD UIs (C# only). Based on feedback/usage scenarios/support requirements, we expect to extend the gallery with new UI templates throughout next year.

 

Forms, Editors, Groups, Buttons - Winforms UI Templates, DevExpress

 

All WinForms UI Templates leverage existing DevExpress WinForms controls, fully support WinForms MVVM, DirectX Hardware Acceleration, DevExpress Application Skins, and HTML & CSS Support. UI Templates are configurable and can be extended as needs dictate.

 

Side-by-Side Master-Detail Grid/Tree Views with CRUD UI

We also created 6 new UI Templates (User Controls) with ready to use side-by-side master-detail view. All templates ship with the predesigned CRUD UI, support MVVM architecture, and integrate our WinForms Data Grid, TreeList, Layout, and Data Editors.

 

Side-by-Side Master-Detail Tree View with CRUD UI - Winforms UI Templates, DevExpress

 

Try It Now!

All WinForms UI Templates ship as VSIX extension. Active Universal subscribers can download these extensions via the DevExpress Download Manager.

 

Download VSIX

 

After you install our UI Templates, be sure to review our Quick Start Guide for technical guidance and watch our tutorial videos:

 

Tell Us What You Think

We expect to expand/extend our WinForms gallery with new UI Templates once we are certain that UI Templates are of business value to you and your enterprise.

While this EAP is limited to active Universal subscribers for now, we want to hear from everyone targeting the Windows Forms platform.

Please take a moment and read our blog post and take the survey.

 

#Data Grid

Enable/Disable and Show/Hide Detail Tabs on Demand

New options in the GridView.DetailTabStyle event allow you to enable/disable and display/hide individual detail tabs (in code) based on a specific condition.

  • C#
                        void GridView_DetailTabStyle(object sender, DetailTabStyleEventArgs e) {
                            if (e.Caption == "Notes" && <CUSTOM_CONDITION>)
                                e.Visible = false;
                            if (e.Caption == "Users" && <CUSTOM_CONDITION>)
                                e.Enabled = false;
                        }
 

Master-Detail - Apply Display Attribute to List Properties

You can now apply the 'Display' data annotation attribute to list properties within your data objects.

  • C#
                        public class Category {
                            public int ID { get; set; }
                            public string Name { get; set; }
                            [Display(Name="PRODUCTS")]
                            public List<Product> Products { get; set; }
                            [Display(AutoGenerateField=false)]
                            public List<Note> Notes { get; set; }
                        }
 

BandPositionChanged Event

The BandPositionChanged event fires when a band changes its position or visibility:

  • A user drags the band and drops it to a different position.
  • A user hides or drags the band to/from the customization form.
  • Band visibility was modified in code.
 

#DirectX Form

Support for Bar Items

The form header can now display Bar Items. Like our Toolbar Form, the DirectX Form header includes two regions that can accept Bar Items. The leftmost region can display Bar Items next to the form's icon. The rightmost region can display Bar Items before the form’s Minimize-Maximize-Close buttons.

 

Support for Docking

We continue to extend the list of DirectX-compatible controls and components that can be placed/displayed inside our DirectX Form. With v22.2, our DirectX Form supports both the DevExpress Dock and Document Manager components.

 

Miscellaneous Enhancements

  • We enhanced the design-time experience. You can now place controls on various DirectX Form regions.
  • <input> tag support in HTML & CSS Templates.
  • Enhanced interaction with our WinForms Scheduler control.
 

#Data Editors

Step Progress Bar - Shining Shadows

Our new ShadowDrawMode adds a glow effect to indicators and connectors. You can apply a glow effect to active elements, inactive elements, or both active and inactive elements.

 

Shining Shadows - WinForms Step Progress Bar, DevEpress

 

ListBox - Display Custom Content When the List Is Empty

Our new CustomDrawEmptyForeground event allows you to display custom content within the ListBox control when it does not include items. You can use our standard custom draw API or render an HTML Template within the list box.

Example 1 - Traditional Custom Draw

  • C#
                        void ListBoxControl1_CustomDrawEmptyForeground(object sender, ListBoxDrawEmptyForegroundEventArgs e) {
                            e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
                            e.Appearance.DrawString(e.Cache, "The ListBox is empty.", e.Bounds);
                        }

Custom Draw Empty Background - WInForms ListBox, DevExpress

Example 2 - Render HTML Template

  • C#
  • HTML
  • CSS
                            // Local painting context that contains HTML tree state.
                            DxHtmlPainterContext ctx = new DxHtmlPainterContext();

                            // Draw HTML template.
                            HtmlTemplate htmlTemplate = new HtmlTemplate(LoadTemplate("ListBoxEmptyForeground.html"), LoadTemplate("ListBoxEmptyForeground.css"));
                            void ListBoxControl1_CustomDrawEmptyForeground(object sender, ListBoxDrawEmptyForegroundEventArgs e) {
                                e.DrawHtml(htmlTemplate, ctx);
                            }
                            static string LoadTemplate(string fileName) {
                                return File.ReadAllText(fileName);
                            }
                            void ListBoxControl1_MouseMove(object sender, MouseEventArgs e) {
                                ListBoxControl listControl = sender as ListBoxControl;
                                if(listControl.ItemCount == 0) {
                                    ctx.OnMouseMove(e);
                                    listControl.Cursor = ctx.GetCursor(e.Location);
                                    listControl.Invalidate();
                                } else listControl.Cursor = Cursors.Default;
                            }
                            // Handle the 'Add Items' button's click.
                            void ListBoxControl1_MouseDown(object sender, MouseEventArgs e) {
                                ListBoxControl listControl = sender as ListBoxControl;
                                if(listControl.ItemCount == 0 && e.Button == MouseButtons.Left) {
                                    var clickInfo = ctx.CalcHitInfo(e.Location);
                                    if(clickInfo != null && clickInfo.ParentHasId("btnAdd"))
                                        listControl.Items.AddRange(new string[] {
                                            "Item 1",
                                            "Item 2",
                                            "Item 3"
                                        });
                                }
                            }
                            <div class="container">
                                <div class="title">There are no items in the ListBox control</div>
                                <div class="button" id="btnAdd">Add Items</div>
                            </div>
                            .container {
                                display: flex;
                                flex-direction: column;
                                justify-content: center;
                                align-items: center;
                                height: 100%;
                            }
                            .title {
                                font-size: 14px;
                            }
                            .button {
                                background-color: @green;
                                color: @white;
                                opacity: 0.8;
                                border: 1px solid @green;
                                border-radius: 4px;
                                padding: 8px 18px;
                                font-size: 13px;
                                margin: 8px;
                                text-align: center;
                                cursor: pointer;
                            }
                                .button:hover {
                                    background-color: @green;
                                    box-shadow: 0px 0px 3px @green;
                                    opacity: 0.9;
                                }

Draw HTML Template - WinForms ListBox, DevExpress

 

List Editors - Sort Items in Ascending, Descending, and Custom Order

Our WinForms CheckedComboBoxEdit now supports sort operations in unbound mode. Use its new SortOrder property to sort items in ascending or descending order.

We also added a CustomSort event to our ListBox, Checked ListBox, Image ListBox, and Checked Combobox controls. Handle this event to sort list items using custom sort logic.

  • C#
                    using DevExpress.XtraEditors.Controls;

                    void CheckedListBoxControl1_CustomSort(object sender, CheckedListBoxCustomSortEventArgs e) {
                        if(e.Item1.CheckState == e.Item2.CheckState)
                            e.Result = ((string)e.Value1).CompareTo((string)e.Value2);
                        else
                            e.Result = e.Item1.CheckState == CheckState.Checked ? -1 : 1;
                    }
                    void CheckedListBoxControl1_ItemCheck(object sender, DevExpress.XtraEditors.Controls.ItemCheckEventArgs e) {
                        checkedListBoxControl1.Sort();
                    }
                    void Form1_Load(object sender, EventArgs e) {
                        checkedListBoxControl1.Items.AddRange(new CheckedListBoxItem[] {
                            new CheckedListBoxItem(){ Value = "Bart Arnaz" },
                            new CheckedListBoxItem(){ Value = "Leah Simpson" },
                            new CheckedListBoxItem(){ Value = "Arnie Schwartz" },
                            new CheckedListBoxItem(){ Value = "Billy Zimmer" },
                            new CheckedListBoxItem(){ Value = "Samantha Piper" },
                            new CheckedListBoxItem(){ Value = "Maggie Boxter" },
                            new CheckedListBoxItem(){ Value = "Brad Farkus" },
                        });
                        checkedListBoxControl1.CheckOnClick = true;
                    }
 

LookUp Enhancements

Incompatible Value Type Exception

All lookup editors (LookUpEdit, SearchLookUpEdit, TreeListLookUpEdit, and GridLookUpEdit) now offer warnings when bound to incompatible type values.

You can also enable the ThrowExceptionOnInvalidLookUpEditValueType option to detect data type issues and throw an exception.

 

Clear Value on Delete/Backspace Press

Users can now clear a lookup's value by pressing Delete or Backspace key if the editor allows the user to reset its value with the keyboard (AllowNullInput option is enabled).

 

SVG Support in Dropdown Window

The LookUpEdit can now display SVG graphics within its dropdown (out-of-the-box). Documentation

 

Select First Item on Enter

Our new SelectFirstRowOnEnterKey option allows users to select the first item within the dropdown list when they press the Enter key after a search operation.

WinForms Lookup Control, DevExpress

 

New DateOnly/TimeOnly Masks in Text Edit (.NET 6+)

New Date-Time masks help you edit DateOnly and TimeOnly data structures. When one of these masks is used, the text editor automatically converts its EditValue to an appropriate type.

DateOnly and TimeOnly mask types can be used in .NET 6+ apps.

 

#Gauges

DirectX Support

The DevExpress WinForms Gauges control is now rendered using our DirectX engine when placed inside a DirectX Form.

 

#HTML & CSS Support

HTML & CSS Templates for Message Boxes & Dialogs

Our WinForms Message Box and Dialog components now support HTML & CSS Templates.

 

WinForms MessageBox and Dialogs - Support for HTML Templates, DevExpress

 

HTML & CSS Templates for Tooltips

Our WinForms ToolTips now support HTML & CSS Templates.

 

WinForms Tooltips - Support for HTML Templates, DevExpress

 

Accordion - Support for HTML & CSS Templates

The WinForms Accordion control now supports our industry-first WinForms HTML & CSS Template engine. HTML & CSS Templates allow you to create fully custom user interfaces in the shortest possible time. New APIs can generate templates for nearly every Accordion UI element.

Documentation

 

WinForms Accordion - Support for HTML Templates, DevExpress

We created a new demo that demonstrates how to transform our WinForms Accordion control into a beautiful Hamburger Menu.

 

WinForms Hamburger Menu - Support for HTML Templates, DevExpress

 

HTML Selection

Users can now select text displayed by HTML templates. HTML selection is available in our HTML Content Control and our WinForms Data Grid's ItemsView, TileView, and WinExplorerView. Use the AllowContentSelection property to enable this feature.

We added a new SelectedText property to store the textual content for a selected region (including text, button captions, images, and other HTML elements).

The SelectedTextChanged event occurs whenever selection changes and allows you to review and change selected text as needs dictate.

 

HTML Selection - WinForms Controls, DevExpress

 

Custom Draw HTML

You can now draw an HTML template within the Custom Draw event handlers. The event parameter includes the e.DrawHtml method. This enhancement was introduced across most of DevExpress WinForms UI controls.

Documentation

  • HTML
  • CSS
  • C#
                        <div class="container">
                            <div class="cpu-name">${ProcName}</div>
                            <div>
                                <div class="label">${ProcBaseFrequency}</div>
                                <div class="label">${RamMemorySize}</div>
                                <div class="label">${VidTrademark} {VidMemorySize}</div>
                            </div>
                            <div class="price">${ModelPrice}</div>
                            <div id="btn-add" class="btn-add" dx-class="{Added:added}">${AddButtonCaption}</div>
                        </div>
                        .container {
                            text-align:center;
                            padding-top:18px;
                        }
                        .cpu-name {
                            font-size:14px;
                            font-weight:bold;
                        }
                        .label {
                            display:inline-block;
                            background-color:@DisabledText/0.3;
                            padding:4px;
                            border-radius:4px;
                        }
                        .price {
                            margin-top:6px;
                            margin-bottom:6px;
                            font-size:18px;
                        }
                        .btn-add {
                            display:inline-block;
                            background-color:@HighlightAlternate;
                            color:@White;
                            padding:8px;
                            border-radius:18px;
                            font-weight:bold;
                            cursor:pointer;
                        }
                        .added{
                            background-color:@Green;
                        }
                        void OnCustomDrawRecordHeader(object sender, Events.CustomDrawRecordHeaderEventArgs e) {
                            // ...
                            e.DrawHtml(headerTemplate, htmlCtx, (args) => {
                                args.InteractivityKey = dataSourceRowIndex;
                                bool isAddedToCart = orders.Contains(dataSourceRowIndex);
                                args.SetFieldValue("Added", isAddedToCart);
                                args.SetFieldValue("AddButtonCaption", isAddedToCart ? "ADDED TO CART" : "ADD TO CART");
                            });
                        }
 

Draw HTML Template - WinForms ListBox, DevExpress

 

Visualize Data Collections

Our new <dx-collection> tag renders a template for each element in a collection. Read the blog post

  • HTML
                        <template id="member-template">
                            <div class="initials">${Initials}</div>
                        </template>
                        ...
                        <dx-collection class="members" Items="${Members}" ItemTemplate="member-template"></dx-collection>

Visualize Data Collections - WinForms Controls, DevExpress

 

Html Template Collection

We created a new HtmlTemplateCollection component - an external template storage. HTML & CSS templates added to this collection can be used by different UI controls.

  

CSS Style Selectors

You can now conditionally apply styles directly in HTML markup. The use of HTML markup is both easier and faster than handling events in code behind.

Use our new dx-class attribute to specify CSS selection conditions.

We supported the following syntax options:

  • HTML
                        <!-- Boolean data field -->
                        <div dx-class="{IsUrgent: urgent, normal}">
                            <!-- Applies the 'active' class if the IsActive property is set to true. -->
                            <img dx-class="{IsActive: active}" />

                            <!-- Hides the element if the IsVisible property is set to true. -->
                            <img dx-class="{IsVisible: , hidden}" />
                        </div>

                        <!--
                        Enumeration data field.
                        The 'red' class corresponds to the first element.
                        The 'green' class corresponds to the second element, and so on.
                        -->
                        <div dx-class="{Color: red, green, blue}">
                        ...
                        </div>

                        <!--
                        Enumeration data field.
                        Class names should exactly match enumeration values.
                        -->
                        <div dx-class="{State}">
                        ...
                        </div>

                        <!-- A string data field that matches the class name -->
                        <div dx-class="{ClassName}">
                        ...
                        </div>

You can apply multiple classes in a condition. And, of course, you can use static and conditional classes together.

  • HTML
                        <div class="task" dx-class="{IsUrgent: urgent highlight, normal}">
                        ...
                        </div>

Documentation    Blog Post

 

CSS Style Selectors - WinForms TileView, DevExpress

 

Colorize SVG - 'Fill' CSS Property Support

The <img> tag now supports the fill property. Use this property to set the color for an SVG image. This setting overrides both the presentation attribute <path fill="#fff" ...="" /> and inline style (e.g., <path style="fill: #fff;" ...="" />).

  • CSS
  • HTML
                        img {
                            fill: Gray;
                        }
                            img:hover {
                                fill: Green;
                            }
                            img:active {
                                fill: LightGreen;
                            }
                        <img src="my-svg-image" />

Colorize SVG - WinForms HTML & CSS Templates, DevExpress

 

Position and Z-index Properties

Our HTML & CSS engine now supports position and z-index CSS properties - invaluable tools to manage HTML element layout within a template.

The position property specifies the position of an element in a template. This property accepts the following values: 'static', 'relative', 'absolute', and 'fixed'. The element's 'top', 'right', 'bottom', and 'left' properties determine its final location.

 

Position CSS Property - WinForms Controls, DevExpress

 

The z-index property specifies the z-order of a positioned HTML element. Use this property to position elements in layers on top of one another. Overlapping elements with a larger z-index cover those with a smaller z-index.

The z-index property only works with elements whose 'position' property is explicitly set to 'absolute', 'fixed', or 'relative'.

 

Z-index CSS Property - WinForms Controls, DevExpress

 

#Layout Containers

Stack & Layout Panels - Skin-Dependent Indents and Separators

We added a new UseSkinIndents option. When enabled, the Stack and Table Panels use the following settings from the currently active skin:

  • panel paddings;
  • control margins inside panel cells;
  • horizontal and vertical separator width.

Use a panel's Padding and a control's Margin properties to specify custom indents.

You can also create horizontal and vertical separators to arrange UI controls into groups. To arrange controls into groups, create a column or row, and set its Style property to 'Separator'.

 

#Scheduler

Resource Headers - HTML & CSS Support

 

HTML Tempaltes for Resource Headers - WinForms Scheduler, DevExpress

 

Show Popup Menu - New Event Arguments

We added new arguments to the PopupMenuShowingEventArgs class. This class provides data for the PopupMenuShowing event. New arguments include:

  • Allow - gets or sets whether to enable a popup menu. Allows you to disable the popup menu as needed.
  • HitInfo - identifies the clicked menu UI element.
  • MenuType - gets popup menu type.
  • Point - gets the position used to invoke the popup menu.
 

#TreeList

Expand/Collapse Nodes Using Right/Left Arrow Keys

Users can now use Right and Left arrow keys to expand/collapse nodes. This is the default behavior in our WinForms TreeList control with one column (in TreeView mode).

 

Skinned Paddings and Configurable Indent in Preview Sections

We made minor enhancements to TreeList skins to maintain look and feel consistency across all DevExpress "grid-based" UI controls (added padding to content displayed in preview sections).

We also added a new PreviewIndent property. This property allows you to specify left horizontal offset for content displayed in preview sections.

Skinned Paddings and Configurable Indent in TreeList Preview Sections - WinForms Controls, DevExpress

 

BandPositionChanged Event

The BandPositionChanged event fires when a band changes its position or visibility:

  • A user drags the band and drops it to a different position.
  • A user hides or drags the band to/from the customization form.
  • Band visibility was changed in code.

#Accessibility

We continue to improve Accessibility and UI Automation across our WinForms product line. In v22.2, we enhanced support for assistive tools and supported UI Automation patterns in the WinForms Vertical Grid, Property Grid, and NavBar controls. We also optimized our controls for better memory consumption and boundary detection.

Documentation

 

WPF Controls v22.2

#.NET 6.0/7.0 - Windows

v22.2 requires .NET 6 and Visual Studio 2022 (v17.0) or higher.

v22.2 supports .NET 7.0.

This does NOT affect .NET Framework customers in any manner — our product assemblies will continue to target .NET Framework 4.5.2 in this release cycle (v22.2).

 

#Themes

Windows 11 Dark Theme

Our new Windows 11 Dark theme is based on the Windows 11 Dark Mode.

 

Windows 11 Dark Theme - WPF Controls, DevExpress

 

Automatically Switch a Theme from Light to Dark Mode

We added new System themes that use Windows App Mode and automatically switch the current theme from light to dark mode (and vice versa). This auto-switch option is now available for the following DevExpress themes:

  • Windows 11
  • Windows 10
  • Office 2019 / Office2016SE
  • Visual Studio 2019 / 2017

Documentation

 

#Data Grid

Total Summary Panel Position

Our new TotalSummaryPosition property specifies the location of the Summary Panel within a view. The TableView, TreeListView, and CardView can now display the Summary Panel at the top or bottom as requirements dictate.

In Master-Detail mode, you can set the detail grid's TotalSummaryPosition property to 'Top' to pin the Summary Panel so it remains visible when a user scrolls through individual detail rows.

 

Data Grid: Total Summary Panel Position - WPF Controls, DevExpress

 

#Data Filtering - Performance Enhancements

Performance attributes for the following UI elements have been enhanced:

  • Filter Editor
  • Drop-down Filter
  • Filter Panel
  • MRU Filter List

The following chart compares performance data between release cycles (filter UI elements contain 500 items).

Data Filtering Performance Chart - WPF Data Grid, DevExpress

 

#Asynchronous Data Editing

You can now incorporate asynchronous data editing within our WPF Data Grid when using Server Mode or Instant Feedback mode. DialogEditFormBehavior allows you to execute the following operations asynchronously:

  • XAML
  • C#
                        <dxg:GridControl ...>
                            <dxmvvm:Interaction.Behaviors>
                                <dxg:DialogEditFormBehavior x:Name="EditFormBehavior" KeyProperty="Id"
                                    CreateEditItemViewModelCommand="{Binding CreateEditEntityViewModelCommand}"
                                    ValidateRowCommand="{Binding ValidateRowCommand}"
                                    ValidateRowDeletionCommand="{Binding ValidateRowDeletionCommand}"
                                    AllowCancelAsyncOperations="True">
                                    <!-- ... -->
                                </dxg:DialogEditFormBehavior>
                            </dxmvvm:Interaction.Behaviors>
                        </dxg:GridControl>
                        [Command]
                        public void CreateEditEntityViewModel(CreateEditItemViewModelArgs args) {
                        args.GetViewModelAsync = GetViewModel(args);
                        }
                        [Command]
                        public void ValidateRow(EditFormRowValidationArgs args) {
                        args.ValidateAsync = ValidateRow(args);
                        }
                        [Command]
                        public void ValidateRowDeletion(EditFormValidateRowDeletionArgs args) {
                        args.ValidateAsync = ValidateDeletion(args);
                        }
                        async Task<IEditItemViewModel> GetViewModel(CreateEditItemViewModelArgs args) {
                        // ...
                        }
                        async Task ValidateRow(EditFormRowValidationArgs args) {
                        // ...
                        }
                        async Task ValidateDeletion(EditFormValidateRowDeletionArgs args) {
                        // ...
                        }

Documentation

 

Unbound Columns - Custom Types

Our new UnboundDataType property allows you to set unbound column type explicitly. You can now specify previously unavailable types, such as 'TimeSpan' or 'DateTimeOffset'.

  • XAML
                        <Window ...
                            xmlns:dxg="https://schemas.devexpress.com/winfx/2008/xaml/grid"
                            xmlns:sys="clr-namespace:System;assembly=mscorlib">
                                <dxg:GridControl ...>
                                    <!-- ... -->
                                    <dxg:GridColumn FieldName="RemainingTime"
                                        UnboundDataType="{x:Type sys:TimeSpan}"
                                        UnboundExpression="[RequiredDate]-[OrderDate]"/>
                                </dxg:GridControl>
 

#Tree List

#Asynchronous Loading of Child Nodes

Our WPF TreeList control and TreeListView within the DevExpress WPF Data Grid can now load data asynchronously. The TreeList fetches child nodes in a background thread and displays a wait indicator when the fetch operation is in progress.

As you might imagine, Asynchronous Child Node Loading helps prevent unwanted screen "lock-ups" and allows you to deliver more responsive WPF solutions.

Documentation

 

Asynchronous Loading of Child Nodes - WPF TreeList, DevExpress

 

#Performance Improvements

We improved our WPF TreeList control's BeginDataUpdate / EndDataUpdate implementation. Batch modifications are now twice as fast when compared to previous versions. The following internal test results help illustrate the performance advantages of this release (1,000 items added to the TreeList control with 1M loaded nodes).

TreeList: Performance Chart - WPF TreeList, DevExpress

 

#Data Editors

New Path Editor

Our new Path Editor allows you and your users to easily specify a path to either a file or folder. Users can enter path information within the edit box, browse the file system to select a file/folder, or drop the file/folder within the editor.

Features include:

  • Configurable file/folder Browse Dialog (Open File, Save File, Folder Browser)
  • File/folder Path Validation
  • Drag & drop file/folder support
  • Display System and Custom Icons

And yes, you can use the WPF Path Editor within DevExpress container controls like our WPF Data Grid, WPF TreeList, etc.

Documentation

 

Path Editor - WPF Controls, DevExpress

 

Buttons - Provide Visual Feedback for Async Operations

DevExpress WPF Button Controls (e.g., simple, dropdown, split buttons) can now indicate the progress of bound asynchronous operations (tasks). While the operation is in progress, the button displays a wait indicator. This allows you to offer visual feedback for data-intensive operations.

Use the AsyncDisplayMode property to enable this feature. You can set this property to 'Wait' to display the wait indicator or to 'WaitCancel' 'WaitCancel' allows users to cancel a given operation.

 

Visual Feedback for Async Operations - WPF Controls, DevExpress

 

Password Box - Password Reveal

Our WPF Password Box ships with a new password reveal button. Users can click the reveal button to unmask a password. A long press on the button reveals the password until release.

 

Password Editor - WPF Controls, DevExpress

 

#Date Navigator - Performance Improvements

The Date Navigator can now switch views much faster than ever before. Users will notice a significant performance gain when navigating dates within our WPF Scheduler control (if bound to a multi-month Date Navigator).

 

Date Editor Performance Chart - WPF Controls, DevExpress

 

Custom Masks for Text Editors

We introduced a new CustomMask event for all WPF Text Editors. Handle this event to incorporate custom patterns when our predefined mask types do not address your business requirements.

Event arguments allow you to obtain input text, user actions that triggered the event (e.g., insert, delete, backspace, etc.), and the result of the action itself. You can also process the editor's selected text/caret position, or cancel the edit operation entirely.

Documentation

  • XAML
  • C#
                        <dxe:TextEdit MaskType="Custom" CustomMask="OnCustomMask"/>
                        void OnCustomMask(object sender, DevExpress.Xpf.Editors.CustomMaskEventArgs e) {
                            // Process user input.
                            // This example demonstrates how to allow users to enter only Latin letters and
                            // capitalize entered characters.
                            if (e.ActionType == CustomTextMaskInputAction.Init || e.IsCanceled == true)
                                return;
                            var textInfo = CultureInfo.InvariantCulture.TextInfo;
                            if (!Regex.IsMatch(e.InsertedText, @"^[a-zA-Z]+$") && e.ActionType == CustomTextMaskInputAction.Insert)
                                e.Cancel();
                            else e.SetResult(textInfo.ToUpper(e.ResultEditText), e.ResultCursorPosition);
                        }
 

New Date-Time Masks in Text Edit

New Date-Time masks help you edit DateTimeOffset, DateOnly, and TimeOnly structures. When one of these masks is used, the text editor automatically converts its EditValue to an appropriate type (to easily bind it to a property within your View Model).

DateOnly and TimeOnly mask types can be used in .NET 6+ apps.

 

Date Edit - Specify the Default View in Code

Our new SelectionView allows you to specify the default view (Month, Year, Years, or Year Range) in code.

Documentation

 

#Ribbon & Toolbars

Bar Item Menu Header - Show/Hide Caption

Our ShowContentHeader property allows you to display/hide captions for individual bar item menu headers (and by extension, create Windows 11-inspired context menus).

 

Windows 11 Context Menu - WPF Controls, DevExpress

 

#Scheduler

#On-Demand Data Loading

Our WPF Scheduler Control can now load appointments asynchronously. When used, DevExpress-powered WPF scheduling solutions remain responsive.

Documentation

 

On-Demand Data Loading - WPF Scheduler, DevExpress

 

Date Navigation Panel - Dropdown Calendar and View Selector

The Date Navigation Panel can now display new UI elements. The Calendar button opens the dropdown calendar. The View Selector allows users to switch between calendar views.

Use the ShowCalendarButton and ShowViewSelector options to display/hide the corresponding UI elements.

 

Date Navigation Panel - WPF Scheduler, DevExpress

 

#MVVM

New UIObjectService

We added a new UIObjectService service. You can attach this service to any UI element in a View to access the element directly from a ViewModel. Documentation

  • XAML
  • C#
                        <dxg:GridControl ItemsSource="{Binding Source}" AutoGenerateColumns="AddNew">
                            <dxg:GridControl.View>
                                <dxg:TableView ...>
                                    <dxmvvm:Interaction.Behaviors>
                                        <dxmvvm:UIObjectService/>
                                    </dxmvvm:Interaction.Behaviors>
                                </dxg:TableView>
                            </dxg:GridControl.View>
                        </dxg:GridControl>
                        <Button Content="Export to PDF" Command="{Binding ExportToPdfCommand}"/>
                        using DevExpress.Mvvm;
                        using DevExpress.Mvvm.DataAnnotations;
                        // ...

                        public class MainViewModel : ViewModelBase {
                            // ...
                            public IUIObjectService UIObjectService { get { return GetService<IUIObjectService>(); } }
                            [Command]
                            public void ExportToPDF() {
                                UIObjectService.Object.ExportToPdf(@"C:\Work\Documents\GridExport.pdf");
                            }
                        }
 

Numeric Mask Attribute - Always Show Decimal Separator

We extended our NumericMaskAttribute with a new AlwaysShowDecimalSeparator option. When enabled for a numeric data field, a bound editor formats its edit value to a string (the display value), and retains the decimal separator (".") even if the fractional portion of the edit value is zero.

  • C#
                        using DevExpress.Mvvm.DataAnnotations;
                        // ...
                        public class DataItem {
                            public int Id { get; set; }
                            [NumericMask(UseAsDisplayFormat = true, AlwaysShowDecimalSeparator = true)]
                            public double NumericField { get; set; }
                        }
 

#Property Grid

New API for Context Menus

You can show, hide, and customize context menus in code. New API includes:

 

Collection Buttons - API Enhancements

The WPF Property Grid control now includes CollectionButtonsVisibility and CollectionButtonClick events. These events allow you to set up the Add and Remove collection buttons. You can display/hide these buttons conditionally and process desired add/remove operations.

Documentation

 

In-Place Editors - Process User Actions

We added the following events:

 

#Miscellaneous

Themed MessageBox - Text Selection, Button Images, Close by Timer

Text Selection
Enable the AllowTextSelection option to select a message and copy it to the clipboard.

  • C#
                        var parameters = new ThemedMessageBoxParameters() {
                            AllowTextSelection = true
                        };
                        ThemedMessageBox.Show(
                            title: "Error",
                            text: "Error code: DX0001",
                            messageBoxButtons: MessageBoxButton.OK,
                            messageBoxParameters: parameters
                        );

Button Images
Use the Glyph and GlyphAlignment properties to display and alight an image within the button.

  • C#
                        var buttonApply = new UICommand() {
                            // ...
                            Glyph = new System.Uri("pack://application:,,,/DevExpress.Images.v22.2;component/SvgImages/Icon Builder/Actions_Check.svg")
                        };
                        var buttonCancel = new UICommand() {
                            // ...
                            Glyph = new System.Uri("pack://application:,,,/DevExpress.Images.v22.2;component/SvgImages/Icon Builder/Actions_Delete.svg")
                        };
                        ThemedMessageBox.Show(
                            title: "Dialog Title",
                            text: "Message",
                            icon: MessageBoxImage.Exclamation,
                            messageBoxButtons: new UICommand[] { buttonApply, buttonCancel }
                        );

Close by Timer
Use the TimerTimeout property to specify and enable the timer. The timer is applied to the default button. Use the TimerFormat property to format the timer string displayed in the button.

  • C#
                        var parameters = new ThemedMessageBoxParameters() {
                            TimerTimeout = new System.TimeSpan(0, 0, 5),
                            TimerFormat = "{0} ({1:%s} sec.)"
                        };
                        ThemedMessageBox.Show(
                            title: "Dialog Title",
                            text: "Message",
                            messageBoxButtons: new UICommand[] { buttonOk, buttonCancel },
                            messageBoxParameters: parameters
                        );

Themed Window - WPF UI Controls, DevExpress

 

Middle-Click Scroll

Our WPF UI controls now support middle-click scroll operations. Users can now press the middle mouse button and move the mouse to scroll content.

Set the AllowMiddleMouseScrolling property to 'true' to enable this capability. Use the MiddleMouseScrollSpeed and MiddleMouseScrollThreshold properties to customize scroll behaviors.

The following DevExpress WPF UI controls support this feature:

  • Data Grid
  • Accordion
  • Document Preview Control
  • Gantt Control
  • List Box
  • PDF Viewer
  • Pivot Grid
  • Property Grid
  • Rich Text Editor
  • Spreadsheet
  • TreeList
  • TreeView

DevExtreme JavaScript Components v22.2

#

 

#UI Template Gallery

We extended the capabilities of our DevExtreme component library with a set of responsive UI templates. These ready-to-use UI “blocks” will allow you to focus efforts on application logic and minimize energy spent on app/UI design.

Blog Post    GitHub Repository

 

#Data Visualization

Range Bar Chart - Minimum Bar Size

Use the new minBarSize property to specify minimum size for bars displayed in the Range Bar Charts.

 

Range Bar Chart - Minimum Bar Size, DevExtreme

Online Demo

 

Data Visualization Components - Adapt to Container Resize

Our Chart, Gauge, and Map controls now automatically adapt to changes in container.

 

Data Visualization Components - Adapt to Container Resize, DevExpress

 

VectorMap - Control Panel Customization

The following options allow you to display/hide the Pan Control and Zoom Bar: panVisible and zoomVisible.

Online Demo

 

#Pivot Grid

Export Field Panel Headers to Excel

You can now include field panel headers in an exported worksheet. The following field header export-related options available:

  • exportColumnFieldHeaders
  • exportDataFieldHeaders
  • exportFilterFieldHeaders
  • exportRowFieldHeaders
 

Export Field Panel Headers to Excel, DevExtreme

Online Demo

 

Field Chooser - Encode HTML

The new encodeHtml property allows you to process HTML tags as plain text or apply them to header filter values.

 

#UI Components

CSS Styles Enchancements

The following components are now rendered more consistently under different use-case conditions (applies to both our Generic and Material themes):

  • Button
  • Calendar
  • Toolbar
  • DateBox
  • Scheduler
  • FieldSet
  • List

For instance, buttons within our Toolbar's overflow menu now reflect specified types and styling modes.

 

CSS Styles Enchancements - UI Widgets, DevExtreme

 

Validation Message Position

Our new validationMessagePosition option specifies the position of a validation message relative to the editor's input region. Available settings include: 'bottom' (default), 'top', 'left', and 'right'.

 

Validation - UI Widgets, DevExtreme

Online Demo

 

Show/Hide API Enhancements

The cancel parameter for onShowing/onHiding events now supports the Promise type. This allows you to execute asynchronous actions before components are displayed/hidden. This enhancement is available in the following UI components:

  • Popup
  • Popover
  • Tooltip
  • Toast
  • LoadPanel

The show/hide methods now return a Promise object, which is resolved once the operation is complete. This Promise is rejected if the operation was cancelled.

 

Slider & Range Slider - Value Change Mode

The Slider and Range Slider components now include a valueChangeMode option. This option specifies when a slider's value is changed. Available modes include:

  • The value changes when the user releases the slider handle.
  • The value changes immediately whenever the user moves the slider handle.
 

Slider Value Change Mode, DevExtreme

Slider Demo    RangeSlider Demo

 

Toolbar Adaptability - Multiline Mode

Our Toolbar can now wrap across multiple lines when it is wider than its container. Use the multiline property to enable multiline mode.

 

Toolbar Adaptability, DevExtreme

Online Demo

 

Accordion - Title Templates for Individual Items

You can now define title templates for individual items. Use the titleTemplate property as requirements dictate.

 

Accordion Title Templates, DevExtreme

 

CheckBox - Cycle Through Three State

We extended the functionality of our CheckBox component. Users can now toggle between all three states by clicking a box (cycling from unchecked to checked and then to an indeterminate state).

Use the enableThreeStateBehavior option to enable this mode.

 

CheckBox - Cycle Through Three State, DevExtreme

Online Demo

 

Calendar - Week Numbers

The Calendar component can now display week numbers. Use the showWeekNumbers property to enable this option.

 

Calendar - Week Numbers, DevExtreme

 

The Calendar automatically sets the first week of the year based on culture (locale). We added the weekNumberRule property to specify the rule used to determine the first week of the year. Available rules include auto, first day, first four days, and full week.

 

Online Demo

 

SelectBox and TagBox - Submit Custom Items on Loss of Focus

We enhanced the default behavior of our SelectBox and TagBox components. These components create custom items when the user presses the Enter key or when the component loses focus.

And yes, you can assign a DOM event to the customItemCreateEvent property to change the default behavior as needed.

 

Form – Custom Label Template

Form labels can now display images and support content formatting. Use the label.template property to define a custom template.

 

Form – Custom Label Template, DevExtreme

Online Demo

 

Popup and Popover - Overflow Menu in Toolbar

Toolbars within our Popup and Popover components can now display an overflow menu.

Use the following API to customize the menu and toolbar items:

 

Popup and Popover - Overflow Menu in Toolbar, DevExtreme

Online Demo

 

DateBox - Customize Today Button Text

You can now rename the Today button (which appears in 'date' and 'datetime' modes). The new todayButtonText property specifies the text for the button.

 

Blazor UI Components v22.2

#.NET 7 Support

Our Blazor components fully support .NET 7. The DevExpress Template Gallery now includes Blazor project templates for .NET 7.

 

#Ahead-of-Time (AOT) Compilation Support

DevExpress-powered Blazor WebAssembly apps now support ahead-of-time (AOT) compilation. You can compile your .NET code directly to WebAssembly.

Note: AOT compilation improves runtime performance, but it does increase application size.

In the Blazor WebAssembly app's project file, add the RunAOTCompilation property. Set this property to 'true' to enable WebAssembly AOT compilation.

  • XAML
                        <PropertyGroup>
                        <RunAOTCompilation>true</RunAOTCompilation>
                        </PropertyGroup>
 

#Blazor Hybrid Support (CTP)

You can now use DevExpress Blazor UI components in Blazor Hybrid apps. With Blazor Hybrid, Razor components run natively on both mobile and desktop devices. This improves performance and provides access to native device capabilities through the .NET platform.

DevExpress Blazor components support the following platforms with Blazor Hybrid:

  • .NET MAUI (Windows, MacOS, Android, iOS)
  • WinForms
  • WPF

Documentation

 

#Bootstrap v5.2 Support

DevExpress Blazor components now fully support the latest release of Bootstrap v5.2. Set the BootstrapVersion option to v5 to ensure that your app works correctly.

  • C#
                        builder.Services.AddDevExpressBlazor(configure => configure.BootstrapVersion = BootstrapVersion.v5);
 

#New Render and Size Modes

The DevExpress Blazor Data Grid (DxGrid), Editors, Layout, and Navigation components now use our optimized rendering engine instead of Bootstrap. This change will allow us to extend our Blazor component suite with the following new capabilities/features:

  • Improved rendering performance with fewer JavaScript interop calls.
  • Consistent appearance across DevExpress Blazor components.

Our new rendering engine significantly improves the capabilities of existing Blazor Size Modes:

  • Blazor components (regardless of size mode used) are downsized to address the requirements of "dense" interfaces and display more relevant information on screen. The new Large Size Mode mirrors what used to be “Medium.” The new Medium mode is closer to what used to be “Small.” And our new Small mode allows you to deliver interfaces similar to desktop apps such as Microsoft Outlook.
  • New size modes apply to our Blazor Data Grid (DxGrid), Tabs, Flyout, and other UI components that previously did not support the size mode option.
  • Size modes now offer a more consistent user experience and affect all spacings/sizes across supported Blazor components. For example, our Blazor Form Layout component adjusts paddings between items/groups based on the selected size mode.

Refer to the following article for instructions on how to update your app: Bootstrap rendering was replaced with a new rendering engine.

Render and Size Modes - Blazor UI Components, DevExpress

 

#New Window Component

Our new Window component is a non-modal window. Its features include:

  • Move & Resize
  • Header Customization
  • Show/Hide Close Button
  • Window Positioning (at a specified position or UI element)
  • Keyboard Support
  • Comprehensive API

Documentation

 

Blazor Window Component, DevExpress

 

Online Demo

 

#Data Grid

Export Data to Excel

Our Blazor Data Grid can now export data to Excel. With this new API, you can save your data to XLS, XLSX, and CSV files (or stream). Data export operations support grouping, sorting, filtering, totals, and group summaries.

New API includes:

All methods accept the 'options' parameter. This parameter allows you to customize the exported document.

 

Grid - Export Data to Excel, DevExpress Blazor UI Components

 

Online Demo

 

Search Box

Our Blazor Data Grid component includes a progressive case-insensitive search option (allows you to locate matched text as you type). When you type within the search box, the Data Grid filters data rows, displays those that match the search string, and highlights search results.

Additional features include:

  • Support for special characters.
  • Configurable input delay.
  • Search box placeholder (null text) support.
  • Ability to exclude specific columns from search operations.
  • Built-in search text parse modes.
  • Ability to specify search text in code (Search API).

And yes, you can customize search box appearance settings, render the search box from a template, or use an external editor.

Documentation

 

Grid - Search Box, DevExpress Blazor UI Components

 

Online Demo

 

Integrated Editor Appearance

DevExpress Data Editors embedded into cells share the same border with the cell itself.

To enable the new mode, set the EditorRenderMode property to Integrated.

 

Integrated Editor Appearance - Blazor Data Grid, DevExpress

 

Online Demo

 

Focused Row

Our Blazor Grid now supports row focus. Users can focus a row with the mouse. Set the FocusedRowEnabled property to 'true' to enable this feature.

The SetFocusedDataItemAsync and SetFocusedRowIndex methods allow you to focus a row in code. The Data Grid fires the FocusedRowChanged event after the focused row has changed.

 

Grid - Focused Row, DevExpress Blazor UI Components

 

Online Demo

 

Select All

The new SelectAllCheckboxMode property specifies the behavior of the Select All check box. Available options include:

  • Page - selects/deselects all rows on the current page.
  • AllPages - selects/deselects all rows across all pages.
  • Mixed - selects/deselects all rows on the current page. A drop-down button opens a context menu and allows users to select and deselect all rows across all grid pages.

New API includes:

 

Online Demo

 

Filter by Display Text

The new DxGridDataColumn.FilterMode property specifies how to filter column data. Available options include:

  • DisplayText - filters data against text displayed within cells.
  • Value - filter data against cell values.
 

Filter Expression API

This new API allows you to filter data in code and implement an external filtering UI tailored to specific usage scenarios:

 

Online Demo

 

Fixed and Relative Height

You can explicitly set the height of our Blazor Grid or set the height as a percentage of the height of the container/viewport. The footer element will remain at the bottom regardless of the rows displayed within the Grid.

  • XAML
                        <DxGrid style="height:100%" Data="@forecasts">
 

#Accordion

Item Selection

Our Blazor Accordion component now supports item selection. Set the SelectionMode property to Single to enable this capability.

Users can click an item header to select the item. The SelectItem method allows you to select an item in code.

 

Online Demo

 

URL-match Mode

The Accordion component can automatically select an item if its NavigateUrl property value points to the current URL (which is displayed in the web-browser's address bar). Available modes include Current Path, Prefix, and Exact.

Two new properties allow you to specify how the Accordion component matches URLs:

You can also use the Reason property to identify why selection was changed.

 

Expand and Collapse Animation

You can now play the slide animation effect when expanding/collapsing Accordion items.

 

Online Demo

 

#Data Editors

New Mask Types

  • Date-Time Offset - allows a user to enter only date and time values, and stores the time's offset from Coordinated Universal Time (UTC) in the editor's value. You can apply this mask to the DxDateEdit and DxMaskedInput components. The DxDateTimeOffsetMaskProperties class allows you to customize the mask settings. Documentation
  • Time Span - allows users to enter only time intervals in DxMaskedInput. Use the DxTimeSpanMaskProperties class to configure the mask. Documentation
 

Online Demo

 

Validation Icons

Data editors can now display meaningful validation icons (Error or Success) and text-based feedback (tooltips).

You can enable validation icons for all editors in your app or specify icon visibility for each editor individually.

Documentation

 

Validation Icons - Blazor UI Cmponents, DevExpress

 

Online Demo

 

Delayed Input

Our data editors with text input fields (e.g., DxMaskedInput, DxMemo, DxTextBox, DxSpinEdit) can now update associated values with a delay. Enable this option if you wish to reduce value updates (reducing updates improves client-side performance).

We also added a new BindValueMode property. Set it to 'OnDelayedInput' to enable delayed input. You can also use the InputDelay property to specify the delay period.

 

Online Demo

 

Focus First Match

Our Blazor ComboBox component automatically highlights the first match after a filter operation. This feature allows users to select values via the keyword.

 

Online Demo

 

Command Buttons

Released in v22.2.4

DevExpress Blazor Editors can now display custom command buttons to the left or right of the text input region. You can also hide/customize default command buttons as requirements dictate (such as the button that activates a dropdown).

Documentation

 

Command Buttons - Blazor Data Editors, DevExpress

 

Online Demo

 

#Form Layout

Collapsible Groups

Users can now expand/collapse layout groups. You can use the Expanded property to expand or collapse a group in code.

The new ExpandButtonDisplayMode property allows you to position the expand button within a group header. You can display the expand button to the left or right of the group caption, hide the expand button, or customize its appearance.

You can also play the slide animation effect when expanding/collapsing Form Layout groups.

Documentation

 

Form Layout - Collapsible Groups, DevExpress Blazor UI Components

 

Online Demo

 

New Templates and Customization API

The Form Layout component now includes new customization options for tab pages and layout groups.

Tab Page API:

Layout Group API:

You can also specify the ColSpanXxl property to define the number of columns a layout item, group, or tab page spans across large screens (1400px or wider).

 

Templates - Blazor Form Layout, DevExpress

 

Online Demo

 

#Menu

API Enhancements

 

#Reporting

New Report Viewer & Designer for WebAssembly (ASP.NET Core Hosted)

Our new DxWasmDocumentViewer and DxWasmReportDesigner WASM components are aimed at minimizing integration efforts and reducing support inquiries. These components ship as part of the DevExpress.Blazor.Reporting.JSBasedControls.WebAssembly Nuget package.

Documentation    Blog Post

 

Native Report Viewer — Parameters Panel Layout

Our Report Viewer component (DxReportViewer) can now render the Parameters panel with a custom layout.

Blog Post

 

Blazor Native Report Viewer - Custom Parameters Panel Layout

Online Demo

 

New Project Templates

The DevExpress Blazor App Template Gallery for Visual Studio now includes Reporting templates. Use these templates to jump start the BI application development (be it a Server or WebAssembly Hosted app) process.

Reporting templates allow you to create an application that includes the following:

  • Report Designer
  • Report Viewer (JS-based)
  • Report Viewer (Native)
  • Report Storage
  • Sample SQL Connection, JSON/Object Data Source

In the CLI, our new templates are available as:

  • dx.blazor.reporting.blazorserver
  • dx.blazor.reporting.webassembly
 

#Rich Text Editor

WebAssembly Support

Our Blazor Rich Text Editor now supports the Blazor WebAssembly hosting model. This model offers the following advantages (compared to the server hosting model):

  • The application remains functional if the server goes offline.
  • The application makes full use of the client's resources and capabilities.
  • Processing has moved from the server to the client, so your application takes up fewer server resources.
  • Serverless deployment scenarios are possible.

In Web Assembly applications, our Rich Text Editor component provides the same functionality and behavior as that of a Blazor Server application.

 

Spell Check

Our Blazor Rich Text Editor now supports on-demand spell checking. It can detect spelling errors and suggest corrections.

To enable spell checking, call the AddSpellCheck method to register a spell check service and set the CheckSpelling property to 'true'.

The Rich Text Editor integrates a spell check service using an English dictionary and allows you to add other dictionaries (for various languages) as needed.

Note: You are not limited by what's available out-of-the-box. You can implement and use a custom spell-check service if the default service does not address business requirements.

 

Rich Text Editor - Spell Check, DevExpress Blazor UI Components

 

Online Demo

 

API Enhancements

 

#Tabs

Disabled State

A new Enabled property allows you to enable/disable individual tabs.

 

Tab Header Template

The new TextTemplate property allows you to define a tab header template, which can include custom UI visuals (such as command buttons).

 

#Toolbar

Bind to Data

You can now bind our Blazor Toolbar component to a data source. To introduce this capability in your Blazor app, use its Data and DataMappings properties. In bound mode, the Toolbar generates items automatically.

 

Online Demo

 

API Enhancements

 

#TreeView

URL-match Mode

The Blazor TreeView component can now automatically expand a tree and select a node if its NavigateUrl property value points to the current URL, which is displayed in the web-browser's address bar. Available modes include Current Path, Prefix, and Exact.

Two new properties allow you to specify how the TreeView component matches URLs:

You can also use the Reason property to identify why selection was changed.

 

Expand and Collapse Animation

You can now play the slide animation effect when expanding/collapsing TreeView nodes.

 

TreeView - Expand and Collapse Animation, DevExpress Blazor UI Components

 

Online Demo

 

Node Click Events

 

ASP.NET Core Controls v22.2

#

 

#.NET 6 Support

.NET 6 - Minimum Supported Framework Version

v22.2 requires .NET 6 and Visual Studio 2022 (v17.0) or higher.

Blog Post

 

#Charting

Range Bar Chart - Minimum Bar Size

Use the new minBarSize property to specify minimum size for bars displayed in the Range Bar Charts.

 

Range Bar Chart - Minimum Bar Size, DevExpress ASP.NET Core Controls

Online Demo

 

Data Visualization Components - Adapt to Container Resize

Our Chart, Gauge, and Map controls now automatically adapt to changes in container.

 

VectorMap - Control Panel Customization

The following options allow you to display/hide the Pan Control and Zoom Bar: panVisible and zoomVisible.

Online Demo

 

#Pivot Grid

Export Field Panel Headers to Excel

You can now include field panel headers in an exported worksheet. The following field header export-related options available:

  • exportColumnFieldHeaders
  • exportDataFieldHeaders
  • exportFilterFieldHeaders
  • exportRowFieldHeaders
 

Export Field Panel Headers to Excel, DevExpress ASP.NET Core Controls

Online Demo

 

Field Chooser - Encode HTML

The new encodeHtml property allows you to process HTML tags as plain text or apply them to header filter values.

 

#UI Components

CSS Styles Enchancements

The following components are now rendered more consistently under different use-case conditions (applies to both our Generic and Material themes):

  • Button
  • Calendar
  • Toolbar
  • DateBox
  • Scheduler
  • FieldSet
  • List

For instance, buttons within our Toolbar's overflow menu now reflect specified types and styling modes.

 

CSS Styles Enchancements - ASP.NET Core Controls, DevExpress

 

Validation Message Position

Our new validationMessagePosition option specifies the position of a validation message relative to the editor's input region. Available settings include: 'bottom' (default), 'top', 'left', and 'right'.

 

Validation - ASP.NET Core Controls, DevExpress

Online Demo

 

Show/Hide API Enhancements

The cancel parameter for onShowing/onHiding events now supports the Promise type. This allows you to execute asynchronous actions before components are displayed/hidden. This enhancement is available in the following UI components:

  • Popup
  • Popover
  • Tooltip
  • Toast
  • LoadPanel

The show/hide methods now return a Promise object, which is resolved once the operation is complete. This Promise is rejected if the operation was cancelled.

 

Slider & Range Slider - Value Change Mode

The Slider and Range Slider components now include a valueChangeMode option. This option specifies when a slider’s value is changed. Available modes include:

  • The value changes when the user releases the slider handle.
  • The value changes immediately whenever the user moves the slider handle.
 

Slider Value Change Mode - ASP.NET Core Controls, DevExpress

Slider Demo    RangeSlider Demo

 

Toolbar Adaptability- Multiline Mode

Our Toolbar can now wrap across multiple lines when it is wider than its container. Use the multiline property to enable multiline mode.

 

Toolbar Adaptability - ASP.NET Core Controls, DevExpress

Online Demo

 

Accordion - Title Templates for Individual Items

You can now define title templates for individual items. Use the titleTemplate property as requirements dictate.

 

Accordion Title Templates - ASP.NET Core Controls, DevExpress

 

CheckBox - Cycle Through Three State

We extended the functionality of our CheckBox component. Users can now toggle between all three states by clicking a box (cycling from unchecked to checked and then to an indeterminate state).

Use the enableThreeStateBehavior option to enable this mode.

 

CheckBox - Cycle Through Three State, DevExpress ASP.NET Controls

Online Demo

 

Calendar - Week Numbers

The Calendar control can now display week numbers. Use the showWeekNumbers property to enable this option.

 

Calendar - Week Numbers, DevExpress ASP.NET Core Controls

 

The Calendar automatically sets the first week of the year based on culture (locale). We added the weekNumberRule property to specify the rule used to determine the first week of the year. Available rules include auto, first day, first four days, and full week.

Online Demo

 

SelectBox and TagBox - Submit Custom Items on Loss of Focus

We enhanced the default behavior of our SelectBox and TagBox components. These components create custom items when the user presses the Enter key or when the component loses focus.

And yes, you can assign a DOM event to the customItemCreateEvent property to change the default behavior as needed.

 

Form – Custom Label Template

Form labels can now display images and support content formatting. Use the label.template property to define a custom template.

 

Form – Custom Label Template, DevExpress ASP.NET Core Controls

Online Demo

 

Popup and Popover - Overflow Menu in Toolbar

Toolbars within our Popup and Popover components can now display an overflow menu.

Use the following API to customize the menu and toolbar items:

 

Popup and Popover - Overflow Menu in Toolbar, DevExpress ASP.NET Core Controls

Online Demo

 

DateBox - Customize Today Button Text

You can now rename the Today button (which appears in 'date' and 'datetime' modes). The todayButtonText property specifies the text for the button.

 

.NET Reporting v22.2

#

 

#Reporting for Web

Distributed Document Caching

DevExpress Reports now natively supports report document caching in distributed ASP.NET Core apps. DevExpress Reports utilizes the IDistributedCache interface. You can use a cache storage that implements this interface (e.g., SQL Server, Distributed Redis Cache).

  • C#
                        public void ConfigureServices(IServiceCollection services) {
                            ...
                            services.ConfigureReportingServices(configurator => {
                                configurator.ConfigureWebDocumentViewer(viewerConfigurator => {
                                    services.AddDistributedSqlServerCache(options => {
                                        options.ConnectionString = Configuration.GetConnectionString("SqlCache");
                                        options.SchemaName = "dbo";
                                        options.TableName = "ReportDocumentCache";
                                    });
                                    viewerConfigurator.UseDistributedCache();
                                });
                            })
                            ...
                        }

For supported web platforms (including ASP.NET Web Forms and ASP.NET MVC), we also offer built-in database document storage options (this option uses XPO - our ORM Library and supports all major data sources). See Database Systems Supported by XPO.

 

ES6 Modules

With this release, we switched our Web Reporting products to ECMAScript 2015 language standard to optimize our development process.

See the following blog post for more information in this regard: Web Reporting — Important Changes in v22.2 — ES6 Support

 

Content Security Policy (CSP) Support Improvements

We improved Content Security Policy support for our Web Reporting components. You can now safely remove the 'unsafe-eval' directive from web pages that host the DevExpress Web Document Viewer and Web Report Designer.

Documentation

 

Report Wizard - Customization API & UI Enhancements

The DevExpress Report Wizard’s new customization API allows you to refine auto-generated reports (to brand reports, format headers/footers, and apply desired font settings) as requirements dictate.

Use the TryCreateReport method to create a report (of any type) and apply all settings selected within the Report Wizard. The CustomizeReportOnFinish method allows you to fine-tune the report before it is loaded within the End-User Designer.

We also enhanced the Report Wizard’s start screen. You can now register custom report templates and search across available reports.

Blog Post

Report Wizard - Customization API, DevExpress

 

Data Source UI Enhancements & New API

  • The 'Add Data Source' button in the Field List now opens the Data Source Wizard (the wizard lists predefined data sources).
  • 'Rebuild Schema' and 'Rename Data Source' buttons are now available for each data source in the Field List.
  • The DevExpress.XtraReports.Configuration.DataSourceSettings class contains options that allow you to display/hide UI elements that add, rename, or remove a data source.

Documentation

Web Report Designer - Field List Action Buttons, DevExpress

Web Report Designer - Miscellaneous Enhancements

  • The Sizing property is now set to 'ZoomImage' by default for a Picture Box added from the Toolbox.
  • The Barcode control now renders a real barcode picture according to the selected symbology and specified text data.
  • The Gauge controls now renders a real gauge according to the selected type and specified data property values.
  • The Angular Web Report Designer now offers configuration API. Use this API to set up its wizard and export settings.
  • The Edit Parameters Dialog displays custom report parameter types (based on enums).
  • The Data Source Wizard filters out unsupported database connections (with no XpoProvider key defined).
 

Angular Ivy-Based Package Format Support

This package format helps us to maintain new versions of Angular. It also allows you to speed up the assembly of our components.

 

jQuery UI Dependency Removed

We optimized/refactored our Web Reporting components. They now do not require the jQuery UI dependency.

 

Preconfigured Docker Files

Thanks to preconfigured Docker images (that take care of all necessary native dependencies) the deployment of ASP.NET Core applications with reports has become much easier. You can find these images for Ubuntu, Alpine, Debian, and Amazon Linux in the following GitHub repositories:

 

#Reporting for Blazor

New Project Templates

The DevExpress Blazor App Template Gallery for Visual Studio now includes Reporting templates. Use these templates to jump start the BI application development (be it a Server or WebAssembly Hosted app) process.

Reporting templates allow you to create an application that includes the following:

  • Report Designer
  • Report Viewer (JS-based)
  • Report Viewer (Native)
  • Report Storage
  • Sample SQL Connection, JSON/Object Data Source

In the CLI, our new templates are available as:

  • dx.blazor.reporting.blazorserver
  • dx.blazor.reporting.webassembly

Documentation

 

Native Report Viewer — Parameters Panel Layout

Our Report Viewer component (DxReportViewer) can now render the Parameters panel with a custom layout.

Blog Post

 

Blazor Native Report Viewer - Custom Parameters Panel Layout

Online Demo

 

New Report Viewer & Designer for WebAssembly (ASP.NET Core Hosted)

Our new DxWasmDocumentViewer and DxWasmReportDesigner WASM components are aimed at minimizing integration efforts and reducing support inquiries. These components ship as part of the DevExpress.Blazor.Reporting.JSBasedControls.WebAssembly Nuget package.

Documentation    Blog Post

 

#Visual Studio Report Designer for .NET

Custom Functions in Expressions

Our new 'VSDesignerCustomFunction' attribute allows you to register a custom function and use it in the Expression and Filter Editors.

Documentation

 

Custom Report Controls

You can now use custom report controls in our Visual Studio Report Designer for .NET. The following design-time and UX options are available out of the box:

  • Display Custom Report Controls in the Toolbox
  • Customize Settings in the Properties window
  • Move and Resize
  • Expression Binding
 

ARM64 Support

You can now create and edit reports on machines with ARM-based processors (using Microsoft Surface Pro X or Mac computers with Apple Silicon processors M1/M2).

 

#All Platforms

New SAP HANA Data Source

Our Data Source Wizard allows you to bind a report to a SAP HANA database.

Documentation

SAP HANA Data Source - DevExpress Reporting

 

Entity Framework Core 7 Support

EFDataSource now supports Entity Framework (EF) Core 7.0 context classes bound to MS SQL Server.

Documentation

 

Barcode Enhancements for Accurate Scanning Results

We added a new 'TargetDeviceDpi' property to the XRBarCode class. This property allows you to specify the DPI of the device on which you wish to print a barcode.

Another new property ('ActualModule') gets the module value for the barcode when using the 'AutoModule' and 'TargetDeviceDpi' properties.

Blog Post

Barcode Enhancements for Accurate Scanning Result - .NET Reporting, DevExpress

 

Business Intelligence Dashboard v22.2

All Platforms

New SAP HANA Data Source

Our Data Source Wizard now allows you to bind a report to a SAP HANA database.

Documentation

 

Web Dashboard

Material Theme Support

We optimized the layout and refined the structure of CSS styles used in the DevExpress Web Dashboard component (following Material Design guidelines).

Documentation    Blog Post

 

Material Design - Web BI Dashboard, DevExpress

Online Demo

Content Security Policy (CSP) Support Improvements

We improved Content Security Policy support for our Web Dashboard components. You can now safely remove the 'unsafe-eval' directive from web pages that host the DevExpress Dashboard Viewer and Dashboard Designer.

Documentation

 

XAF - Cross-Platform .NET App UI v22.2

#

 

#XAF Blazor

New Render and Size Modes

The DevExpress Blazor Data Grid (DxGrid), Editors, Layout, and Navigation components now use our optimized rendering engine instead of Bootstrap. This change will allow us to extend our Blazor component suite with the following new capabilities/features:

  • Improved rendering performance with fewer JavaScript interop calls.
  • Consistent appearance across DevExpress Blazor components.

Our new rendering engine significantly improves the capabilities of existing Blazor Size Modes:

  • Blazor components (regardless of size mode used) are downsized to address the requirements of "dense" interfaces and display more relevant information on screen. The new Large Size Mode mirrors what used to be “Medium.” The new Medium mode is closer to what used to be “Small.” And our new Small mode allows you to deliver interfaces similar to desktop apps such as Microsoft Outlook.
  • New size modes apply to our Blazor Data Grid (DxGrid), Tabs, Flyout, and other UI components that previously did not support the size mode option.
  • Size modes now offer a more consistent user experience and affect all spacings/sizes across supported Blazor components. For example, our Blazor Form Layout component adjusts paddings between items/groups based on the selected size mode.

Refer to the following article to learn more about our new rendering engine: blog post.

 

XAF Blazor App Compact Mode, DevExpress

 

Miscellaneous Enhancements in DxGridListEditor

We added the following enhancements to the DxGridListEditor component:

 

Export to Excel - XAF Blazor, DevExpress

 

Split View Layout

We introduced a new ListViewAndDetailView display mode for List Views in Blazor applications. Inspired by the Compact View in Microsoft Outlook, this new feature allows you to present data as a synchronized ListView and DetailView (displayed side by side).

Documentation

 

Split View Layout - XAF Blazor, DevExpress

 

Layout Tabs - Lazy Loading

Layout tabs now support lazy loading. The content of the tab is rendered when the tab is activated and persisted in the DOM.

Documentation

 

Multiple Columns in Lookup Property Editor

The Lookup Property Editor can now display multiple columns in the dropdown. The editor gets column information from the Lookup ListView node in the Application Model.

Documentation

 

Multiple Columns in Lookup Property Editor - XAF for Blazor, DevExpress

 

Expand/Collapse Layout Groups

You can now expand/collapse Layout groups. Activate the IsCollapsibleGroup option to enable this feature. Use the IsGroupCollapsed property to specify the group's expand/collapse state in code.

 

Expand/Collapse Layout Groups - XAF Blazor, DevExpress

 

Inline Editing in the DxGridListEditor

Users can now edit data inline or use the Edit Form. The Edit Form can be displayed instead of the edited row (or displayed in a floating window). Use the InlineEditMode property to specify edit mode. Documentation

 

Expand/Collapse Layout Groups - XAF Blazor, DevExpress

 

Enhanced Accordion & Tree-like Navigation

We integrated a new DevExpress Blazor Accordion component and supported common control options (e.g., images, view variants, open items in separate browser tabs, etc).

 

Accordion: Side Navigation - XAF Blazor, DevExpress

 

#Common Enhancements

.NET 7 Support

XPO's ORM Data Model Designer, XAF's Model Editor, and Solution Wizard support the latest Visual Studio 2022 and .NET 7 versions in v22.2.

See Breaking Changes

 

Prevent Read Access for Navigation Permissions

We implemented a new validation rule to improve control over access permissions. With this release, when you deny access to a Navigation Item for a specific role, XAF informs you if there are associated Type Permissions still open for users with the assigned role. The warning can help prevent unauthorized access to specific object types.

Documentation

 

XPO Connection Provider Enhancements

XPO now supports the latest versions of the following database engines:

  • Microsoft SQL Server 2019 and 2022 (Microsoft.Data.SqlClient.dll 5.0.0 and System.Data.SqlClient.dll 4.6.1.4)
  • Oracle 21c (Oracle.ManagedDataAccess.Core.dll 3.1.21.1)
  • PostgreSQL 15 (Npgsql.dll 6.0.7.0)
  • MySQL Server 8 (MySql.Data.dll 8.0.31.0 and MySqlConnector.dll 2.1.13)
  • SQLite (Microsoft.Data.SQLite.dll 6.0.10 and ystem.Data.SQLite.dll 1.0.116.0)
  • VistaDB 6.4 (VistaDB.6.dll 6.4.0.0)

Documentation

 

#Entity Framework Core

EF Core 6 ORM Support

You can now use Entity Framework Core 6 to access data within all .NET 6-based XAF applications (WinForms, Blazor, and Web API Service).

How to migrate from EF Core 5   Documentation   Tutorial

 

Built-in Property Change Notifications for EF Core

You can now use change-tracking proxies to automatically detect object property changes when accessing data via Entity Framework Core 6. Once you enable the DbContextOptions.UseChangeTrackingProxies option, you no longer need to implement INotifyPropertyChanged and INotifyPropertyChanging to notify clients that a property value has changed.

This new enhancement allows you to simplify business class implementation.

Consider the following example. This is the implementation of a business object in v22.1:

  • C#
                        public class BusinessObject : INotifyPropertyChanged {
                            int id;
                            string name;
                            public int Id {
                                get { return id; }
                                set {
                                    if (id != value) {
                                        id = value;
                                        OnPropertyChanged();
                                    }
                                }
                            }
                            public string Name {
                                get { return name; }
                                set {
                                    if (name != value) {
                                        name = value;
                                        OnPropertyChanged();
                                    }
                                }
                            }
                            protected void OnPropertyChanged([CallerMemberName]string propertyName = null) {
                                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
                            }
                            public event PropertyChangedEventHandler PropertyChanged;
                        }

And this is how it can be transformed in v22.2:

  • C#
                        public class BusinessObject {
                            public virtual int Id { get; set; }
                            public virtual string Name { get; set; }
                        }

The same changes can be done to objects that implement IObjectSpaceLink. For example, this is the implementation of a business object in v22.1.

  • C#
                        public class BusinessObject : IObjectSpaceLink {
                            // ...
                            public void SomeAction() {
                                // some business-logic uses ObjectSpace
                            }

                            IObjectSpace objectSpace;
                            IObjectSpace IObjectSpaceLink.ObjectSpace {
                                get { return objectSpace; }
                                set { objectSpace = value; }
                            }
                        }

And this is how it looks in v22.2.

  • C#
                        public class BusinessObject {
                            // ...
                            public void SomeAction() {
                                var objectSpace = ((IObjectSpaceLink)this).ObjectSpace;
                                // some business-logic uses objectSpace
                            }
                        }

When you configure EF Core DbContext, call the DbContextOptionsBuilder.UseObjectSpaceLinkProxies method to enable automatic IObjectSpaceLink implementation for all persistent classes. Read the following MSDN topic to learn more: DbContextOptions.

The UseChangeTrackingProxies option is enabled by default for all new projects created with the XAF Solution Wizard.

Documentation    Breaking Changes    Tutorial

 

New Base Class for EF Core Business Objects

The abstract DevExpress.Persistent.BaseImpl.EF.BaseObject class includes a key property and implements IObjectSpaceLink and IXafEntityObject interfaces. Inherit from the 'BaseObject' to avoid boilerplate code and enforce best practices across your business objects.

  • C#
                        public class BusinessObject : BaseObject {
                            public virtual int MyProperty { get; set;}
                                // The OnCreated() method is a part of the IXafEntityObject interface implementation
                                public override void OnCreated() {
                                    // ObjectSpace is a part of the IObjectSpaceLink interface implementation
                                    MyProperty = ObjectSpace.GetObjectsQuery<BusinessObject>().Count();
                                }
                        }
 

#.NET APP Security & Web API Service

You can now use Entity Framework Core 6 to access data in our backend Web API / REST API apps. The basic functions of our Web API Service (CRUD, authentication, and authorization) are available for free as part of our .NET App Security & Web API Service.

 

Download Free Copy

 

.NET APP Security & Web API Service, DevExpress

 

Reports Module Support

Download PDF from report templates and filtered data within a database using service endpoints (aka Reports Module). With the api/Report/DownloadByKey, api/Report/DownloadByName endpoints, you can download data from ReportDatav2 containers stored in your database.

Each ReportDatav2 links to an 'XtraReport', report data sources and data models designed in Visual Studio IDE. You can pass a report container identifier, data source criteria, and other parameters as needed.

XAF's Application Wizard adds a ReportController to a new Web API application automatically. You can extend and modify this endpoint to address specific requirements.

Note: This endpoint respects security permissions.

 

DocumentationTutorial Video

 

This option of our Web API Service ships as part of the DevExpress Universal Subscription.

 

Audit Trail Support

Log database history changes using service endpoints (Audit Trail Module). No data changes made via your ORM in Web API endpoints will be unnoticed. You can view the associated log history within your RDBMS or XAF's administrative UI (WinForms, Blazor, and/or ASP.NET Web Forms).

 

Documentation

 

This option of our Web API Service ships as part of the DevExpress Universal Subscription.

 

File Attachment Support

Download BLOB data stored within a database using service endpoints (File Attachments Module). With the api/MediaFile/DownloadStream endpoint, you can download data from FileData, MediaDataObject, Image or byte array properties declared in a data model.

Note: This endpoint respects security permissions.

 

DocumentationTutorial Video

 

This option of our Web API Service ships as part of the DevExpress Universal Subscription.

 

Validation Module Support

Check the state of input data in our Web API Service with either built-in (over 10) or custom validation rules - Validation Module. You can now use our IValidator service to validate input data in your custom endpoints.

 

Documentation

 

This option of our Web API Service ships as part of the DevExpress Universal Subscription.

 

Non-Persistent Object Support

You can now execute CRUD operations for non-persistent and proxy objects in our Web API Service (in the same manner as other persistent objects). We recommend that you inherit from NonPersistentBaseObject or other classes with a key property to enforce best practices for non-persistent classes.

 

Documentation

 

This option of our Web API Service ships as part of the DevExpress Universal Subscription.

 

Built-in Unit Test Infrastructure

Our MainDemo app now includes a pre-configured test project with base classes and helpers along with fixtures for the most popular usage scenarios. This project should help API developers write unit tests for CRUD operations and custom Web API Service endpoints.

  • C#
                        [TestFixture]
                        public class MyWebApiTests : BaseWebApiTest {
                            [Test]
                            public async Task TestPostDelete() {
                                var newResult = await api.PostAsync(
                                    new TestObject { TestProperty = "test" }
                                );
                                Assert.NotNull(await api.GetByKeyAsync<TestObject>(newResult.Oid.ToString()));
                                var deleted = await api.DeleteAsync<TestObject>(newResult.Oid.ToString());
                                Assert.AreEqual(newResult.Oid, deleted.Oid);
                            }
                            [TestCase(typeof(Employee))]
                            [TestCase(typeof(Paycheck))]
                            [TestCase(typeof(Position))]
                            public async Task TestGetBasic(Type objectType) {
                                var result = await api.GetAllAsync(objectType);
                                Assert.Greater(result.Length, 0);
                            }
                        }

This option of our Web API Service ships as part of the DevExpress Universal Subscription.

 

#New Pre-Built Code & Project Error Diagnostics

We enabled XAF/XPO error diagnostics (shipped as part of the DevExpress.ExpressApp.CodeAnalysis NuGet package) in v22.2.3+ using the Project Converter (Breaking Change). We hope this will save you time in Visual Studio or validate your build quality using your CI/CD workflows.

In this update, we also added the following new diagnostics:

  • Internal ShowViewStrategy.ShowView method calls instead of the recommended public ShowViewInPopupWindow, ShowMessage API, or using Actions.
  • Detect redundant NonPersistentAttribute for read-only properties (non-public or missing setters).
  • Detect redundant ExplicitLoadingAttribute for XPCollection properties.
  • Detect redundant IObjectSpaceLink in XPO classes (because the Session property already exists).
  • Detect redundant IXafEntityObject in XPO classes (because AfterConstruction, OnSaving, and OnLoaded methods are available).
  • Incorrect XAF Controller instantiation like 'new DialogController()'.
  • Avoid creating a new Session/UnitOfWork with parameterless constructors in XPO-based XAF projects.
  • Detect XPO-specific attributes in Entity Framework or non-persistent POCO classes or their members.
  • Use the enclosing property name in XPO method calls.
  • Use the supported version of EF Core packages.
  • Use the generic XPCollection<T> class, GetCollection<T> method, and AssociationAttribute without the type parameter to declare your association property.

Documentation

 

.NET MAUI Components v22.2

#

 

#New Material Design 3

From balanced colors to shadows and shapes, and everything in between, our .NET MAUI components now follow the latest Material Design 3 guidelines.

 

Material Design 3 - .NET MAUI Components, DevExpress

 

#Localization

Our new localization mechanism allows you to deliver international mobile apps easier and faster than ever before. We translated all strings in our UI components to English, German, and French. The language is automatically chosen based on device interface settings.

You can add a 'resx' file with localized resources to the project to support a different language(s).

And yes, you can also implement a custom localization mechanism. For example, you can load translated strings from a JSON file.

Documentation    Example (GitHub)

 

#New Token Edit & Auto-Complete Token Edit

Meet our new UI components - TokenEdit and AutoCompleteTokenEdit. With these components, you can easily implement item selection in your mobile apps. Selected items appear as chips in which you can customize color, text, or an entire template.

As its name suggests, the Auto-Complete Token Edit component locates records that match text entered by a user and displays the first item it locates within the data source. It also supports asynchronous item loading. The editor loads items as users enter text without locking the user interface.

 

Token Edit with Auto-Complete - .NET MAUI Components, DevExpress

 

#Cross-Platform DevExpress.Data Library

With this update, our .NET MAUI components utilize the DevExpress.Data library to filter, group, and sort data.

This enhancement delivers a seamless user experience (API-wise) for those familiar with our UI components for WinForms, WPF, and ASP.NET.

 

#Data Grid - Custom Filtering, Sorting, Grouping

You can now define custom rules to filter, sort, and group data in our Data Grid component. New API includes:

Our new AllowLiveDataShaping option enables on-demand data recalculation when users filter, group, and sort data. This feature is also available in our CollectionView.

 

#Themes - Performance & Usability Improvements

We optimized our XAML code. You can now use implicit styles and easily customize appearance of our UI controls.

We improved startup speed during cold starts in our UI controls. To help compute performance related benefits associated with this enhancement, we measured how long it takes to render our Data Grid, Scheduler, and Data Editors when a user launches our test app for the first time.

 

Performance Improvements in .NET MAUI Controls, DevExpress

 

#XAML Hot Reload Support

We added support for XAML Hot Reload in Visual Studio. XAML Hot Reload allows you to continue coding XAML while debugging your application and view the result of XAML changes in your running app, without having to rebuild the project.

CodeRush for Visual Studio v22.2

Compatibility with the Latest Versions of Visual Studio 2022 and C#

CodeRush maintains compatibility with the latest Visual Studio 2022 and C# releases for our most-frequently-used CodeRush features.

Enhancements focus on the following four areas of CodeRush.

Refactoring

  • Import Missing Namespaces
  • Suppress exception messages due to changed API
  • Core performance optimizations and enhancements to a number of CodeRush refactorings (including Reorder Parameters)

Navigation

  • Tab To Next Reference now works with IntelliCode suggestions
  • Navigation now works with decompiled code in a number of providers

Visualization

  • Code Actions Grouping
  • Syntax Coloring for TODO Items
  • Improved Status Bar
  • IntelliRush behaves the same way as IntelliSense when typing keys

Code Quality

  • New Roslyn-based Error Diagnostics for XAF
  • Enhancements to Built-in Code Analysis Diagnostics
  • Code Coverage for MS Tests
  • New wrapping and spacing options added to the CodeRush Code Formatter for formatting switch expressions in C# 8.0 and up.

VCL Controls v22.2

 

#Download Your Copy Today

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

 

Download and InstallDownload Free TrialVCL Demos v22.2

 

#New Vector Graphics for UI Elements

We continue to enhance our UI controls to better support high DPI (4K+) devices and improve rendering regardless of DPI settings. The following controls can now display SVG graphics within UI elements, menus, and dialogs:

  • Chart View in ExpressQuantumGrid
  • Data Editors
  • PDF Viewer
  • Rich Text Editor
  • Scheduler
  • Spreadsheet
  • TreeList

Our VCL controls will display SVG icons by default in v23.1.

Enable our new global dxUseVectorIcons option in the initialization section of the main application unit to display SVG icons. This particular option has been enabled in our demos so you can see the difference when compared to previous versions.

 

Vector Graphics-based for UI Elements - VCL UI Library | DevExpress

 

#"Light" Style Rendering

Clean, simple, and minimalistic UI design is a trend in modern software development. To address this trend, we added a "light" style rendering mode to our VCL Data Grid (ExpressQuantumGrid), and will support this mode in other UI controls in v23.1. When used, our VCL UI controls are rendered without double or thick borders, extra outlines, and other visual noise.

Call the TdxVisualRefinements.ApplyLightStyle class procedure in the initialization section of the main application unit to enable "light" style rendering.

 

Light Style Rendering - VCL UI Library | DevExpress

 

#New Sizable Panel

Our new Panel (TdxPanel) control is designed to break down a form into multiple resizable regions divided by one-pixel splitters. You can place a control on such a panel without gaps or double borders and create lightweight application layouts as needs dictate.

 

Sizable Panel - VCL UI Library | DevExpress

 

#VCL Rendering Engine for Modern App-Design Paradigms and New Skins - Phase #1

Modern app-design trends and new themes like Windows 11 required us to rewrite our rendering engine for both greater performance and UI flexibility - the old schema could not address additional usage scenarios introduced by Windows 11. Our new "Light Style" rendering mode also required updates to old drawing schemas. We expect to deliver our new VCL rendering engine in our next major update (v23.1). Once we ship the new engine, we'll be in position to deliver new vector skins and help you ship more compelling/elegant user interfaces.

With this release (v22.2), we've completed the initial phase of our strategy:

  • Fixed 40+ component layout and image-related issues across all VCL product demos and associated UI controls.
  • Gathered unsupported UI scenarios and performance requirements for our 2023 rendering engine (to support the Windows 11 skin, new skin and palette selectors, "Light Style" mode, etc).
 

Windows 11 Skin, DevExpress

 

Updated VCL Product Demos

We updated our VCL product demos to demonstrate the potential of the following features: SVG images for all UI Elements, new "Light Style" rendering mode (ExpressQuantumGrid demos only), and the new Sizable Panel.

 

VCL Demos v22.2

Ready to Evaluate the Latest Version?

 

With numerous new products and dozens of high-impact features, our new version 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 Free 30-Day Trial