Skip to main content
All docs
V26.1
  • v26.1 Release Notes

    • 20 minutes to read

    Tip

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

    AI Agent Skills

    Our Blazor component/UI library ships with AI Skills designed to help coding agents leverage DevExpress Blazor UI components more effectively. Each skill focuses on a specific component and includes all details needed to generate accurate code: required NuGet packages, relevant APIs, entry points, configuration settings, and common usage scenarios.

    DevExpress Blazor skills are available in the DevExpress AI Skills repository.

    The DevExpress skill set supports the following Blazor components:

    Refer to the following help topic for additional information: DevExpress AI Skills for Coding Agents.

    End of Bootstrap v4 Support

    With the release of v26.1, we completed our transition away from Bootstrap v4 and officially discontinued Bootstrap v4 support:

    • The DevExpress.Blazor.Themes package no longer includes Bootstrap v4-based stylesheets for classic themes (Blazing Berry, Blazing Dark, Office White, Purple).
    • All remaining Bootstrap v4 theme dependencies/default CSS were removed.

    DevExpress Blazor components now support Bootstrap v5.

    Blog Post

    Icon Library (CTP)

    The DevExpress Icon Library is now available to Blazor developers via the DevExpress.Images.Blazor NuGet package. The package includes an extensive icon set, uses a sprite-based delivery model, and exposes consistent APIs for Blazor components.

    DevExpress Icon Library

    The DevExpress Icon Library is available as a Community Technology Preview in our v26.1 release cycle. We encourage you to explore its possibilities and share your feedback as we continue to refine our APIs and feature set.

    Extensive Icon Collection

    The library includes over 13,000 icons designed to cover a variety of UI requirements. To simplify navigation, icons are grouped by the following attributes:

    • Set: Fluent, Desktop Classic, Blazor Classic
    • Style: Regular, Light, Filled
    • Color: Monochrome, Multicolor
    • Size: 12, 16, 20, 24, 28, 32, 48

    This structure allows you to select consistent icons that match your application’s visual language and layout requirements.

    Optimized Delivery

    To minimize performance impact, icons are grouped into ~50 sprites based on associated attributes (set, style, size, and color). Instead of loading sprite files upfront, the application requests them on demand (when a sprite icon is used).

    Sprite-based delivery ensures fast startup and low memory usage.

    Icon API

    Register the DevExpress.Images.Blazor namespace to use the DevExpress Icon Library in your DevExpress-powered Blazor app.

    You can assign icons to our Blazor components using IconUrl properties (such as DxAccordionItem.IconUrl or DxRibbonItem.IconUrl).

    We recommend using semantic icon references (metaphors) – specify an icon identifier, and the framework automatically selects the appropriate icon (based on current theme and UI settings).

    @using DevExpress.Images.Blazor
    
    <DxRibbon>
        <DxRibbonApplicationTab Text="File">
            <DxRibbonApplicationTabItem Text="New"
                                        IconUrl="@Icon.DocumentBlank" />
            <DxRibbonApplicationTabItem Text="Open"
                                        IconUrl="@Icon.FolderOpen" />
            <DxRibbonApplicationTabItem Text="Save as"
                                        IconUrl="@Icon.Save">
                <DxRibbonApplicationTabItem Text="Plain Text" />
                <DxRibbonApplicationTabItem Text="Word Document" />
                <DxRibbonApplicationTabItem Text="PDF" />
            </DxRibbonApplicationTabItem>
            <DxRibbonApplicationTabItem Text="Share"
                                        IconUrl="@Icon.Share" />
            <DxRibbonApplicationTabItem Text="Print"
                                        IconUrl="@Icon.Printer" />
        </DxRibbonApplicationTab>
        @* ... *@
    </DxRibbon>
    

    This implementation simplifies icon management and helps deliver a consistent user experiences across themes, size modes, and other appearance configurations.

    As an alternative, you can reference an icon resource explicitly:

    @using DevExpress.Images.Blazor
    
    <DxButton RenderStyle="@ButtonRenderStyle.Primary"
              Text="Undo"
              IconUrl="@IconStatic.ArrowUndo.Fluent.Filled.Monochrome.Size16"/>
    

    Use exact icon attributes when you need full control over icons.

    Icon Explorer Demo

    Blazor demos now include an interactive page to browse and explore icons available in the DevExpress Icon Library.

    Icon Explorer Demo

    These new demo includes the following capabilities:

    • Icon Search and Filtering
      You can easily find icons (by name or tag) using the built-in search panel with real-time filtering as you type.
    • Predefined Filters Based on Classification
      Includes a right-side panel to filter the icon list by structured classification criteria.
    • Icon Details
      Displays detailed information for selected icons (including API references that you can copy directly into code).

    To explore the potential of the DevExpress Icon Library, navigate to locally installed DevExpress Blazor demos and proceed to Icon LibraryIcon Explorer.

    Performance Enhancements

    The following performance-related enhancements were introduced in our v26.1 release cycle:

    • For all Blazor components: Eliminated virtual tree nodes generated for empty lines and line breaks. This optimization reduces the size and depth of the virtual tree, resulting in performance gains across multiple layers:

      • Server-side — faster tree-diff calculations
      • Client-side — faster tree updates
      • Network — smaller render size due to fewer nodes
    • For Blazor Ribbon, Buttons, CheckBoxes, and other Editors: Optimized rendering and memory usage.

    Together, these changes reduce DOM complexity and deliver improved performance, especially in data-intensive usage scenarios. The graphs below document performance gains across different components and usage scenarios.

    Reduced WebSocket Traffic

    The following graph documents the reduction in WebSocket traffic and virtual node count for different component libraries: DxGrid, DxListBox<TData, TValue>, DxScheduler, DxTextBox, DxButton, and DxCheckBox<T>.

    Optimized Memory Usage

    We measured memory usage on a combined page featuring several components: an Accordion (5 parent items, 8 child items), a Toolbar (10 items), 3 List Boxes (30 items), and 30 Buttons. The page was rendered in Blazor Server mode and tested under a load of 50 concurrent users (SignalR circuits). As a result of our optimizations, memory consumption decreased by approximately 20 percent, with a notable reduction in Gen2, LOH, and POH objects.

    Blazor Ribbon - Memory Consumption

    We measured memory consumption and Blazor render tree overhead for a Blazor Ribbon component with 1000 items. The page was rendered in Blazor Server mode and tested under a load of 15 concurrent users with 2 active SignalR circuits per user. The new rendering architecture reduced memory consumption by up to 26% and decreased render tree overhead by up to 38%.

    Blazor Grid - Performance Enhancements

    Try the DevExpress Blazor Grid performance demo (1M rows × 1K columns) to experience the performance enhancements we’ve introduced in this release cycle:

    Run Demo: Grid Performance - 1M Rows × 1K Columns

    Accessibility Enhancements

    General Enhancements

    • Improved screen reader support for our AI Chat, ComboBox, Filter Builder, Grid, Popup, TagBox, and TreeList UI components.
    • Introduced support for relevant ARIA attributes in our Filter Builder, Grid, HTML Editor, ListBox, Ribbon, Rich Edit, Time Edit, and TreeList UI components.
    • Introduced support for the aria-required attribute in the following Blazor Data Editors: CheckBox, ComboBox, Date Edit, Date Range Picker, List Box, Memo, Radio Group, Spin Edit, TagBox, Text Box, Time Edit.
    • Improved keyboard navigation in our Pivot Table and Ribbon UI components.
    • Added the ability to focus editor command buttons.
    • Added id attributes to Form Layout item captions.
    • Introduced the resize text requirement in our Ribbon UI component.
    • Added colored validation states to our CheckBox, Radio, and Radio Group UI components.

    Windows High Contrast Mode Support

    DevExpress Blazor Fluent themes include built-in support for Windows high contrast mode. When activated, Fluent themes automatically adjust colors to enhance readability and comply with modern accessibility standards. This mode guarantees proper contrast ratios across all UI elements and improves usability for users with visual impairments (without additional setup).

    Fluent Themes - Windows High Contrast Mode Support

    Rich Edit — Screen Reader Support

    Screen readers now announce document content as users navigate with the keyboard.

    • Read aloud paragraphs, lines, words, and characters.
    • Announce and read changes to text selection.
    • Notify users about hyperlinks and inline images.
    • Read text in table cells.

    Template Kit Enhancements

    New Sample Views

    To help address key business usage scenarios more quickly, we added the following sample Blazor component pages to the DevExpress Template Kit:

    Editable Grid
    Uses a DevExpress Blazor Grid and allows users to edit and modify records.
    Master-Detail Grid
    Uses a DevExpress Blazor Grid and visualizes master-detail relationships between two data tables.
    Basic Form Layout
    Uses a DevExpress Blazor Form Layout and arranges DevExpress Blazor Data Editors in a form, with built-in data validation.

    Blazor AI Chat

    Vendor-Agnostic AI Chat

    To improve the overall user experience and align AI Chat with common DevExpress Blazor patterns, we introduced a set of breaking changes in our v26.1. These changes standardize our AI Chat API surface, add integration with agent-based and vendor-agnostic models, and minimize configuration conflicts across components, models, and usage scenarios.

    Use the DevExpress Project Converter to update common code patterns automatically. Pay close attention to the following app areas:

    • AI service registration
    • Component configurations that reference keyed chat services or inference parameters
    • Programmatic message handling

    Message Flow Enhancements

    DevExpress Blazor AI Chat now includes a more flexible MessageSending event model. New APIs give you precise control over long-running operations and custom message workflows. Use them to preprocess user input, call external services, or append an additional response to the chat:

    <DxAIChat MessageSending="OnMessageSending" />
    
    @code {
        async Task OnMessageSending(MessageSendingEventArgs args) {
            await args.Chat.AppendMessageAsync($"Translate message to Spanish", ChatRole.System);
            await args.Chat.ShowLoadingIndicatorAsync("Fetching additional context...");
            /* ... */
            await args.Chat.HideLoadingIndicatorAsync();
        }
    }
    

    Blazor AI Chat New Message Flow

    You can handle the MessageSending event to log user messages for diagnostics, telemetry, or audit purposes. The event does not intercept message delivery. Unless you explicitly cancel it, the component continues to send and display the message.

    <DxAIChat MessageSending="LogUserMessages"
              FileUploadEnabled="true" />
    
    @code {
        private async Task LogUserMessages(MessageSendingEventArgs args) {
            StringBuilder logMessage = new StringBuilder();
            logMessage.AppendLine($@"User message: ""{args.Text}""");
            if(args.Files != null && args.Files.Count > 0) {
                logMessage.AppendLine($"Attachments: {string.Join(", ", args.Files.Select(f => f.Name))}");
            }
            LogConversationHistory(logMessage.ToString());
        }
    }
    

    AIContent API

    DevExpress Blazor AI Chat exposes individual AIContent items streamed between your application and AI services. You can render rich content using custom templates, submit structured AI requests programmatically, and hide specific messages.

    The following new APIs are available:

    Run Demo: AI Tool Approval

    When used with reasoning models, the Contents collection may include the model’s chain-of-thought alongside the final response. In MessageContentTemplate, inspect message Contents to detect and render these thoughts in the chat.

    <DxAIChat ResponseContentFormat="ResponseContentFormat.Markdown">
        <MessageContentTemplate>
            @foreach(var item in context.Contents) {
                if(item is TextReasoningContent reasoning) {
                    <details>
                        <summary>Model Thoughts</summary>
                        <p>@ToHtml(reasoning.Text)</p>
                    </details>
                }
                else if(item is TextContent text) {
                    <p>@ToHtml(text.Text)</p>
                }
            }
        </MessageContentTemplate>
    </DxAIChat>
    
    @code {
        private readonly HtmlSanitizer sanitizer = new HtmlSanitizer();
    
        MarkupString ToHtml(string markdown) {
            string html = Markdown.ToHtml(markdown);
            html = sanitizer.Sanitize(html);
            return new MarkupString(html);
        }
    }
    

    AI Chat Model Thoughts

    Run Demo: Reasoning Visualization

    Improved AI Chat Typing Experience

    DevExpress Blazor AI Chat allows you to control when input text is synchronized with the chat message buffer.

    You can update the buffer on every keystroke, when the input box loses focus, or after the user stops typing for a specified interval. Choose the option that best balances responsiveness and processing load for your specific usage scenario. In Interactive WebAssembly and Auto render modes, delayed updates reduce unnecessary state changes when typing and improve chat responsiveness on slower devices or resource-intensive pages.

    <DxAIChat BindValueMode="BindValueMode.OnDelayedInput"
              InputDelay="1000" />
    

    Empty Chat Customization

    DevExpress Blazor AI Chat allows you to customize text displayed before a conversation starts:

    <DxAIChat EmptyMessageAreaText="How can I help you today?"
              InputBoxNullText="Ask a question or describe a task..." />
    

    Blazor AI Chat — Empty Chat Customization

    UI/UX Enhancements

    We simplified the empty message area to improve the initial DevExpress Blazor AI Chat experience.

    Blazor AI Chat — Updated Design

    New Blazor Smart Paste

    The DevExpress Blazor Form Layout component now supports Smart Paste - a new AI-powered extension that simplifies copying content from external sources. The extension parses unstructured text (such as email content or free-form notes) and automatically populates form fields with relevant data.

    Blazor Form Layout — Smart Paste

    Our new FormLayoutSmartPaste class allows you to customize Smart Paste behavior (map fields, configure AI processing options, and supply additional prompt instructions).

    Our Form Layout also includes a SmartPasteAsync method to trigger Smart Paste workflow from any event handler or custom logic.

    <DxMemo @bind-Text="SampleText"/>
    
    <DxButton Text="Smart Paste"
              Click="@OnSmartPasteClick" />
    
    <DxFormLayout Data="@model" @ref="FormLayout">
        <Extensions>
            <FormLayoutSmartPaste/>
        </Extensions>
        <ChildContent>
            <DxFormLayoutItem Caption="Full Name" .../>
            <DxFormLayoutItem Caption="Amount Due" .../>
        </ChildContent>
    </DxFormLayout>
    
    @code {
        DxFormLayout FormLayout { get; set; }
        BillingFormModel model = new();
        string SampleText { get; set; } =
            "Hi there ... ";
        async Task OnSmartPasteClick() {
            await FormLayout.SmartPasteAsync(SampleText);
        }
    }
    

    Run Demo: Smart Paste

    Read Tutorial: Documentation

    Blazor Pivot Table

    Server Mode Data Sources

    The DevExpress Blazor Pivot Table v26.1 now supports Server Mode data sources for Blazor Server-based applications. These data sources were designed to simplify integration with large data collections (500,000+ records) and maximize performance for these usage scenarios.

    Server Mode data sources handle data calculations at the database level. This reduces the amount of transferred data, decreases memory consumption, and improves component responsiveness.

    Blazor Pivot Table — Server Mode Data Sources

    Run Demo

    Blazor Grid & TreeList

    UI/UX Enhancements

    Border and Gridline Visibility

    You can now hide column lines (separators between adjacent columns/rows) and component borders when using the DevExpress Blazor Grid and/or TreeList UI components (using the GridlinesVisible property). You can combine available enumeration values as design needs dictate.

    <DxGrid Data="Products"
            GridlinesVisible="Gridlines.Horizontal | Gridlines.Outside">
        @* ... *@
    </DxGrid>
    

    Blazor Grid & TreeList — Border and Vertical Gridline Visibility

    Run Demo: Grid - Gridlines Run Demo: TreeList - Gridlines

    Filter Menu Button — New On‑Hover Display Mode

    DevExpress Blazor Grid and TreeList support on‑hover display mode for Filter Menu buttons. When enabled, buttons appear after users hover over column headers. This mode helps produce a more effective user experience and avoid column caption truncation.

    Blazor Grid & TreeList — New On‑Hover Display Mode

    Run Demo: Grid Run Demo: TreeList

    Empty Column Appearance

    We refined empty column appearance (may appear during resize operations) to better align with standard Blazor Grid/TreeList columns.

    Pager Summary

    DevExpress Blazor Grid and TreeList UI components include a new PagerSummaryVisible option. Use it to display the current page number, page count, and data row count within our built-in pager.

    Blazor Grid & TreeList — Pager Summary

    Run Demo: Grid Run Demo: TreeList

    Blazor TreeList

    Unbound Columns

    The DevExpress Blazor TreeList component now supports unbound columns. These columns display values that are not stored in the underlying data source. Use unbound columns to display supplementary/computed data without modifying the original data model.

    The following APIs allow you to populate unbound columns with data:

    <DxTreeList Data="TreeListData"
                UnboundColumnData="TreeList_UnboundColumnData" ... >
        <Columns>
            <DxTreeListDataColumn FieldName="AprilSales" />
            <DxTreeListDataColumn FieldName="MaySales" />
            <DxTreeListDataColumn FieldName="JuneSales" />
            <DxTreeListDataColumn FieldName="Q2Sales" Caption="Q2 Sales"
                                  UnboundType="TreeListUnboundColumnType.Decimal"
                                  UnboundExpression="[AprilSales] + [MaySales] + [JuneSales]" />
            <DxTreeListDataColumn FieldName="Q2YoYChange" Caption="Q2 YoY Change (%)"
                                  UnboundType="TreeListUnboundColumnType.Decimal" />
        </Columns>
    </DxTreeList>
    
    @code {
        // ...
        void TreeList_UnboundColumnData(TreeListUnboundColumnDataEventArgs e) {
            if(e.FieldName == "Q2YoYChange") {
                var sales = ((SalesByRegion) e.DataItem);
                var currentValue = (decimal)e.GetRowValue("Q2Sales");
                var prevValue = sales.AprilSalesPrev + sales.MaySalesPrev + sales.JuneSalesPrev;
                e.Value = (currentValue - prevValue) / currentValue;
            }
        }
    }
    

    Run Demo

    Blazor Data Editors

    Focusable Buttons

    Our Blazor Data Editors include a new Focusable option for command buttons. Once activated, buttons are included in a page’s tab sequence, and users can interact with them using the keyboard.

    <DxDateEdit @bind-Date="@DateTimeValue"
                ShowDropDownButton="false">
        <Buttons>
            <DxEditorButton IconCssClass="editor-icon editor-icon-chevron-left-small"
                            Tooltip="Previous Date"
                            Position="@EditorButtonPosition.Left"
                            Focusable="true"
                            Click="@(_ => OnChangeDayButtonClick(false))" />
            <DxEditorButton IconCssClass="editor-icon editor-icon-chevron-right-small"
                            Tooltip="Next Date"
                            Position="@EditorButtonPosition.Right"
                            Focusable="@true"
                            Click="@(_ => OnChangeDayButtonClick(true))" />
            <DxDateEditDropDownButton Focusable="true" />
        </Buttons>
    </DxDateEdit>
    

    SpinEdit - Focusable Command Buttons

    Read Tutorial: Documentation

    Run Demo: Demo

    Keyboard and Mouse Wheel Interaction Options

    We added new options to control whether users can change editor values using arrow keys and the mouse wheel: AllowUpDownArrowKeys and AllowMouseWheel. The following editor classes support these new properties:

    Set AllowUpDownArrowKeys and AllowMouseWheel properties to false to prevent accidental changes and ensure a more controlled user experience.

    <DxSpinEdit @bind-Value="@NumericValue"
                AllowUpDownArrowKeys="false"
                AllowMouseWheel="false" />
    
    <DxDateEdit @bind-Date="@DateTimeValue"
                Mask="@DateTimeMask.ShortDate"
                AllowUpDownArrowKeys="false"
                AllowMouseWheel="false" />
    
    <DxGrid Data="@employees" EditMode="GridEditMode.EditRow">
        <Columns>
            @*...*@
            <DxGridDataColumn FieldName="HireDate">
                <EditSettings>
                    <DxDateEditSettings Mask="@DateTimeMask.ShortDate" AllowUpDownArrowKeys="false" AllowMouseWheel="false" />
                </EditSettings>
            </DxGridDataColumn>
        </Columns>
    </DxGrid>           
    

    API Enhancements

    We added new properties to the DxComboBoxSettings class (contains settings for auto-generated Combo Box editors):

    • KeyFieldName/KeyFieldNames — Specify one or more fields to use as identifiers when comparing items.
    • DataLoadMode — Specifies how the Combo Box loads data:

      • Auto - The component caches data when the browser loads the web page.
      • OnDemand - The component loads its data whenever a user opens the drop-down window.

    UI/UX Enhancements

    List Editors - Design Updates

    We updated the design of our Blazor List Editors (List Box, ComboBox, TagBox) for DevExpress Fluent themes:

    • item font size and paddings
    • item group style
    • disabled/selected item colors
    • added spacing between list items
    • rounded item corners
    • removed extra borders
    List Box

    List Box - Updated Design

    ComboBox

    ComboBox - Updated Design

    TagBox

    TagBox - Updated Design

    Clear Button

    We updated the background color for Clear buttons used in Blazor Editors (Bootstrap and DevExpress Classic themes).

    Clear Button - Updated Background Color

    Blazor Navigation

    Ribbon Tab Attributes

    The DevExpress Blazor Ribbon Tab now supports standard HTML attributes. Use the Attributes property for the tab header and ContentAttributes for the tab content area.

    These properties improve accessibility and ensure stable metadata for UI automation.

    <DxRibbon>
        <DxRibbonTab Text="Home"
                     Attributes="tabHeaderAttributes"
                     ContentAttributes="tabContentAttributes">
            <DxRibbonGroup>
                <DxRibbonItem Text="New" />
            </DxRibbonGroup>
        </DxRibbonTab>
    </DxRibbon>
    
    @code {
        Dictionary<string, object> tabHeaderAttributes = new() {
            { "data-testid", "ribbon-tab-home" }
        };
        Dictionary<string, object> tabContentAttributes = new() {
            { "aria-label", "Home tab items" }
        };
    }
    

    Data Mapping API Enhancements

    DevExpress Blazor TreeView, Accordion, and Toolbar data mapping APIs now expose additional properties for node and item settings:

    TreeView (DxTreeViewDataMapping):

    • Expanded — maps a Boolean field that specifies a node’s initial expanded state.
    • Selected — maps a Boolean field that specifies a node’s initial selected state.
    • BadgeText — maps a string field to node badge text.
    • Attributes — maps a field that supplies custom HTML attributes for a node.

    Accordion (DxAccordionDataMapping):

    • Expanded — maps a Boolean field that specifies an item’s initial expanded state.
    • Selected — maps a Boolean field that specifies an item’s initial selected state.
    • Attributes — maps a field that supplies custom HTML attributes for an item.

    Toolbar (DxToolbarDataMapping):

    <DxTreeView Data="@Departments">
        <DataMappings>
            <DxTreeViewDataMapping Children="Children"
                                   Text="Name"
                                   Expanded="IsExpanded" />
        </DataMappings>
    </DxTreeView>
    
    @code {
        List<Department> Departments = new List<Department> {
            new Department {
                Name = "Engineering",
                IsExpanded = true,
                Children = new List<Department> {
                    new Department { Name = "Frontend" },
                    new Department { Name = "Backend" }
                }
            },
            new Department {
                Name = "Marketing",
                Children = new List<Department> {
                    new Department { Name = "Digital" },
                    new Department { Name = "Content" }
                }
            }
        };
    }
    

    Run Demo: Toolbar Run Demo: TreeView

    Accordion — Lazy Loading and Pre-Rendering

    The RenderMode property defines when DevExpress Blazor Accordion renders content:

    • Use Expanded to render Accordion item content only when the item is expanded and remove it from the DOM when the item is collapsed. This mode increases page load speed and reduces DOM size at the cost of a small rendering delay.
    • Use All to render all Accordion items on page load. This mode improves UI responsiveness, but increases page load time and DOM size.
    • Use OnDemand to render Accordion item content when the item is expanded for the first time and keep it in the DOM after the item is collapsed. This mode balances page load performance, responsiveness, and resource consumption.
    <DxAccordion RenderMode="ExpandableContentRenderMode.All">
        <Items>
            <DxAccordionItem Text="Shapes" Expanded="true">
                <Items>
                    <DxAccordionItem Text="Circle" />
                    <DxAccordionItem Text="Square" />
                </Items>
            </DxAccordionItem>
            <DxAccordionItem Text="Templates" />
        </Items>
    </DxAccordion>
    

    Run Demo

    UI/UX Enhancements

    Accordion

    To improve readability and contrast on colored and image backgrounds, we enhanced the appearance of the DevExpress Blazor Accordion as follows:

    • The filter panel now includes a visible border to distinguish it from list items.
    • Hover and pressed state backgrounds are now semi-transparent.

    Blazor Accordion — Updated Design

    Ribbon

    Our Blazor Ribbon more closely aligns with the Microsoft Office Ribbon design. As you can see in the following image, our Blazor Ribbon’s updated UI is more compact and consistent:

    Blazor Ribbon — Updated Design

    TreeView

    We updated the design of our Blazor TreeView component:

    • Expand/collapse buttons are now more compact and closely align with Microsoft Office design principles.
    • New hover and selected state colors better adapt to different background colors.

    Blazor TreeView — Updated Design

    Blazor Filter Builder

    Customize Count Functions

    The DevExpress Filter Builder component allows you to customize Count functions for collection fields. Specify EditSettings or define the ValueEditTemplate to customize the editor used to select the Count value. Use the ValueDisplayTemplate to customize how the selected value is displayed.

    The following code snippet adds prompt text to the Count editor displayed for the Orders field:

    Filter Builder - Customize a Count Editor

    <DxFilterBuilder @bind-FilterCriteria="FilterCriteria">
        <Fields>
            <DxFilterBuilderField FieldName="Orders" Caption="Orders" IsCollection="true">
                <EditSettings>
                    <DxSpinEditSettings NullText="Type the Order Count" />
                </EditSettings>
                <Fields>
                    <DxFilterBuilderField FieldName="OrderDate" Caption="Order Date" Type="@typeof(DateTime?)" />
                    <DxFilterBuilderField FieldName="CustomerName" Caption="Customer" Type="@typeof(string)" />
                    <DxFilterBuilderField FieldName="Quantity" Caption="Quantity" Type="@typeof(int)" />
                </Fields>
            </DxFilterBuilderField>
        </Fields>
    </DxFilterBuilder>
    

    Toggle User Interaction

    You can temporarily deactivate the DevExpress Blazor Filter Builder component using the Enabled property.

    Blazor PDF Viewer

    Zoom Enhancements

    Our new ZoomLevelChanged event allows you to execute custom actions whenever a document is zoomed in/out within the DevExpress Blazor PDF Viewer.

    Blazor Themes

    Automatic Style Registration

    With v26.1, you no longer need to register PDF Viewer, Report Viewer, and Rich Text Editor stylesheets in the Components/App.razor file – the DxResourceManager.RegisterTheme method adds associated styles automatically.

    The following is a v25.2 code snippet…

    <head>
        @DxResourceManager.RegisterTheme(Themes.Fluent)
        <link href="_content/DevExpress.Blazor.Reporting.Viewer/css/dx-blazor-reporting-components.fluent.css" rel="stylesheet" />
        <link href="_content/DevExpress.Blazor.Viewer/css/dx-blazor-viewer-components.fluent.css" rel="stylesheet" />
        <link href="_content/DevExpress.Blazor.RichEdit/dx-blazor-richedit.css" rel="stylesheet" />
        @* ... *@
    </head>
    

    … with v26.1, it can be replaced with a method call:

    <head>
        @DxResourceManager.RegisterTheme(Themes.Fluent)
        @* ... *@
    </head>
    

    Blazor Buttons

    API Enhancements

    We added a new property to the DxButtonBase class (contains base settings for buttons):

    • IconUrl — Specifies button icon URL.

    Blazor Windows

    Smoother Focus Behavior Across Devices

    The following DevExpress Blazor components now adapt focus behavior for the current device:

    On desktop devices, focus moves to the first interactive element in the window to support faster keyboard interaction. On mobile phones and tablets, focus moves to the popup/window container to avoid unexpected keyboard activation and viewport shifts.

    The FocusOnOpen property specifies whether focus moves to a newly opened DevExpress Blazor DropDown or remains on the current element.

    <DxDropDown @bind-IsOpen="isOpen"
                FocusOnOpen="false">
        <BodyContentTemplate>
            <!-- ... -->
            <DxButton Text="Accept the terms of the EULA" />
        </BodyContentTemplate>
    </DxDropDown>
    

    MessageBox — Custom Content Template

    DevExpress Blazor Message Box includes a ChildContent template. Use it to display custom Razor markup in the message box body (instead of plain text).

    To customize a message box created by the dialog service, pass a RenderFragment to the AlertAsync or ConfirmAsync method.

    <DxMessageBox Title="Update Available!">
        <ChildContent>
            <p>Version <b>26.1</b> is ready for download.</p>
            <p>
                Explore the latest features and bug fixes in our 
                <a href="https://www.devexpress.com/subscriptions/whats-new/" target="_blank">Release Notes</a>.
            </p>
        </ChildContent>
    </DxMessageBox>
    

    MessageBox Content Template

    Run Demo: Customization Run Demo: Dialog Service

    Blazor UI Kit Updates

    We updated our Blazor UI Kit for the DevExpress Fluent theme as follows:

    • Created the first figma component version for the DevExpress Blazor Grid.
    • Added a figma component for the DevExpress Blazor Ribbon.
    • Implemented separate frames with focus state for the following components: DxListBox, DxMenu, DxPager, DxTabs, and DxTagBox.
    • Presented DxButton as a separate component and fixed related design issues.
    • Added information section for each component.
    • Refined component section appearance.

    Blazor UI Kit Updates

    Review and download design files on Figma: Blazor UI Kit — Fluent Theme.

    See Also