The DevExpress.Drawing Graphics Library was first introduced in November 2022 as a Community Technology Preview [CTP]. This update marks its official release. The following drawing library-related capabilities and features are now available in non-Windows environments:
Reports:
- Render justified text in labels.
- Respect source image resolution [dpi] within
7 .DevExpress.XtraEditors.WindowsFormsSettings.SetAccentColor[Color.FromArgb[16,124,65]];
- Embed PDFs into report documents using the
8 report control.DevExpress.XtraEditors.WindowsFormsSettings.SetAccentColor[Color.FromArgb[16,124,65]];
- Display and print gauges within reports using the
9 report control.DevExpress.XtraEditors.WindowsFormsSettings.SetAccentColor[Color.FromArgb[16,124,65]];
- Use the
0 property to specify image resolution.assistant.Attach[grid, x => { x.CurrentPath = initialPath; string customCommandName = "custom"; x.ContextMenuShowing += [s, e] => { e.MenuItems.AddCommand["Custom command", customCommandName]; }; x.BeforeExecuteItemCommand += [s, e] => { if[e.CommandName == customCommandName] { XtraMessageBox.Show["Custom command executed"]; e.Cancel = true; } }; }];
- Export all report pages to a single TIFF image [
1 export mode].assistant.Attach[grid, x => { x.CurrentPath = initialPath; string customCommandName = "custom"; x.ContextMenuShowing += [s, e] => { e.MenuItems.AddCommand["Custom command", customCommandName]; }; x.BeforeExecuteItemCommand += [s, e] => { if[e.CommandName == customCommandName] { XtraMessageBox.Show["Custom command executed"]; e.Cancel = true; } }; }];
- Automatically replace missing font glyphs for reports exported to PDF / Image and drawn in the Web Viewer.
BI Dashboard:
- Gauges and Treemaps Export
Office File API:
- Shapes in Word Processing and Spreadsheet Document API
- PDF Graphics API
- Treemap and Sunburst Visualizations in Word Processing and Spreadsheet Document API
- Export to Bitmap and Image Extraction in PDF Document API
- Improved Barcode Export in Barcode Generation API
We also replaced all
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
2 enumerations in our public API with cross-platform counterparts.
Read the following breaking change advisory for detailed information related to this update: Office-Inspired Products, Barcode Generation API, Reporting, and Printing - Members changed their types and signatures.
Windows Forms Designer for .NET - Enhancements
- .NET projects support loading images into project resources.
- Add images into project resources using the DevExpress Image Gallery.
- Collections - Load From Project Resources
- You can filter properties by name within Visual Studio's Properties window.
- We use our collection editors to edit collection properties of DevExpress WinForms controls.
- You can use the Splash Screen Manager's smart-tag to add a Splash Screen or a Wait Form to your project.
WinForms Template Gallery
Item Templates for .NET Applications
You can now use the following Item Templates within .NET applications:
- UI-Ready User Control
- UI-Ready Form
- Custom Data Editor
- Custom Data Grid
Your feedback matters. Please, review the description of WinForms-related features below and leave your feedback at the end of the section.
Data Grid
WYSIWYG and Data-Aware Export Enhancements
We added a new
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
3 event to all View types. Handle this event to determine whether view data was printed or exported without errors. Use the
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
4 event parameter to determine if the operation was successful, failed, or was cancelled.
- C#
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Base;
public Form1[] {
InitializeComponent[];
gridView1.PrintExportCompleted += GridView1_PrintExportCompleted;
}
private void GridView1_PrintExportCompleted[object sender, PrintExportCompletedEventArgs e] {
if[e.Status == GridPrintExportResult.Error]
XtraMessageBox.Show[
new XtraMessageBoxArgs[] {
Text = "An unexpected error occurred while exporting data.",
Caption = "Error",
ImageOptions = new MessageBoxImageOptions[] {
SvgImage = svgImageCollection1[0],
SvgImageSize = new Size[32, 32]
}
}];
}
Data Editors
Lookup Editor – Multiple Item Selection
Our WinForms Lookup Editor includes a new multiple item selection option. With this capability, you can display a checkbox column within the lookup and allow users to select multiple values using the mouse or keyboard.
Color Editors - Allow Null Input
Our WinForms ColorEdit and ColorPickEdit controls now set the
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
5 property to null [Nothing in Visual Basic] if the
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
6 option is enabled and a user presses Ctrl+Del or Ctrl+0.
We added a new
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
7 property so you can specify a custom null color. This value is assigned to the editor's Color property when the user resets the edit value.
Skins and Vector Icons
Support for Default App Mode in Windows OS
We added a new
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
8 setting. When enabled, your application can track the Default App Mode setting used in Windows OS and only display light or dark color palettes within the Skin gallery.
Available for the DevExpress "WXI", "Basic", and "Bezier" skins.
- C#
static void Main[] {
Application.EnableVisualStyles[];
Application.SetCompatibleTextRenderingDefault[false];
WindowsFormsSettings.TrackWindowsAppMode = DevExpress.Utils.DefaultBoolean.True;
Application.Run[new Form1[]];
}
System and Custom Accent Colors
DevExpress vector skins can now change associated colors once end users make a change to a system accent color within Microsoft Windows. Activate the
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
9 setting to enable this option*.
- C#
using DevExpress.Utils;
using DevExpress.XtraEditors;
static void Main[] {
Application.EnableVisualStyles[];
Application.SetCompatibleTextRenderingDefault[false];
WindowsFormsSettings.TrackWindowsAccentColor = DefaultBoolean.True;
Application.Run[new Form1[]];
}
You can also specify a custom accent color and apply the desired appearance on the fly.
- C#
DevExpress.XtraEditors.WindowsFormsSettings.SetAccentColor[Color.FromArgb[16,124,65]];
"The Bezier" skin supports a secondary accent color. Use the
filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
0 method to specify a second accent color.
* The
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
9 setting does not work with our High Contrast skin.
WXI Skin - Enhanced Rendering
We enhanced the rendering of our text input and dropdown editors with a custom background color [WXI skin*].
* Our WinForms BreadCrumbEdit, MemoEdit, and TokenEdit controls do not support this feature.
Charting
Enhanced Visualization of Spline Series
We enhanced the visualization of our spline chart - the spline line is rendered between local minimum and maximum values:
Use the SplineAlgorithm property to specify the drawing algorithm used for the Spline series view.
This change affects the following series views:
- SplineSeriesView
- SplineAreaSeriesView
- StackedSplineAreaSeriesView
- FullStackedSplineAreaSeriesView
- Spline3DSeriesView
- SplineArea3DSeriesView
- StackedSplineArea3DSeriesView
- FullStackedSplineArea3DSeriesView
Read the following breaking change advisory for detailed information: The default drawing algorithm of Spline series view was changed
Dialogs
Preview Pane
Our WinForms Open File and Save File Dialogs ship with an integrated Preview Pane. Your users can now preview PDFs, Office-related documents, HTML file, text files, and images within the dialog.
Customize Context Menu
We added new events designed to customize context menus [add new commands, hide/disable commands, etc.] in our WinForms File Explorer Assistant component:
2filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
3filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
- C#
assistant.Attach[grid, x => {
x.CurrentPath = initialPath;
string customCommandName = "custom";
x.ContextMenuShowing += [s, e] => {
e.MenuItems.AddCommand["Custom command", customCommandName];
};
x.BeforeExecuteItemCommand += [s, e] => {
if[e.CommandName == customCommandName] {
XtraMessageBox.Show["Custom command executed"];
e.Cancel = true;
}
};
}];
Filtering UI
Filter Control - UX Enhancements
The WinForms Filter control includes a new
filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
4 property that specifies whether the Filter Control always displays action buttons [for example, add or remove a condition] or displays buttons on hover.
- C#
filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
Gantt Control
Timeline
The WinForms Gantt control includes a new integrated Timeline.
Features include:
- Display Timeline at the Top or Bottom of the Gantt Control
- Bind to Data
- Multiple Timeline Bars
- Add/Remove Tasks and Milestones to/from Timeline
- Configurable Date-Time Range
- Select Multiple Tasks
- Today Indicator
- Built-in Context Menu
- Go to Task
- Pan and Zoom Timeline Scale
- Resize Timeline
- Print and Export
- Comprehensive Timeline API
Documentation Blog Post
HTML & CSS Support
Reusable HTML & CSS Templates
Our WinForms HTML & CSS Template Gallery includes a set of predesigned templates based on those used in our WinForms demo applications. You can use these templates "as-is" or customize as needed. You can create an HTML & CSS template, save the template to the gallery, and use it in any WinForms project when needed.
Bind Image Tags to Data Fields with Image Names
You can now bind image tags to data source fields with image names. An HTML Template checks whether the data field contains SVG or bitmaps. If it does not, the template looks for an image with the specified name in the
filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
5 [assigned to the control's
filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
6 property].
- HTML
Ribbon
New Office 365 Style
Our WinForms Ribbon Control ships with a new Office 365 rendering style.
When our new Office 365 style is used, the WinForms Ribbon control displays a Search box at the top of the Ribbon form and displays Show Ribbon options on the bottom right of the Ribbon UI.
Use the following API to enable new UI enhancements in other Ribbon styles:
7 - Gets availability and behavior settings for the "Show Ribbon" popup menu.filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
8 - Allows you to customize the "Show Ribbon" menu or prevent it from being displayed [based on a specific condition].filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
9 - Specifies the position of the Search box.filterControl1.ShowActionButtonMode = DevExpress.XtraEditors.ShowActionButtonMode.Always;
Backstage View – Align Items to Top and Bottom
Backstage View item settings now include a new
0 option. This option allows you to align items to the top and bottom of the Backstage View, and to the left and right of the Caption Bar and Quick Access Toolbar [when it is displayed below the Ribbon control].
- C#
backstageViewItem.Alignment = BackstageViewItemAlignment.Bottom;
Show Alerts within the Ribbon Message Bar
We implemented new APIs to display Office-inspired flyout notifications and alerts.
New APIs include:
1 - Displays a message in the message bar.
2 - Closes the specified message.
3 - Occurs after a message is closed and allows you to handle button clicks.
4 - Gets a collection of messages displayed in the message bar.- C#
using DevExpress.XtraBars.Ribbon;
void ShowMessage[] {
RibbonMessageArgs args = new RibbonMessageArgs[];
args.Caption = "What's New";
args.Text = "Explore new WinForms-related features we expect to introduce in our first major update this year [v23.1].";
args.Icon = MessageBoxIcon.Information;
args.Buttons = new DialogResult[] { DialogResult.OK };
args.Showing += Args_Showing;
Ribbon.ShowMessage[args];
Ribbon.MessageClosed += Ribbon_MessageClosed;
}
void Ribbon_MessageClosed[object sender, RibbonMessageClosedArgs e] {
if[e.Result == DialogResult.OK]
Data.Utils.SafeProcess.Start["//community.devexpress.com/blogs/winforms/archive/2023/02/16/devexpress-winforms-roadmap-23-1.aspx"];
}
void Args_Showing[object sender, RibbonMessageShowingArgs e] {
e.Buttons[DialogResult.OK].Caption = "Explore Roadmap";
}
Page Header Items – Colorization in Vector Skins
Page header items [
5 and
- can adjust text and SVG icon colors based on the background color in vector skins. The background color must be set to a Skin Color [at design time, switch to the "DX Skins" tab to choose a Skin Color].
Rich Text Editor
Rotated Text in Tables
The WinForms Rich Text Editor now supports rotated text in table cells. We added a 'Text Direction' command to the Ribbon UI and a TableCell.TextDirection property to rotate cell text in code.
You can print and export [PDF] documents with rotated text in tables.
Embedded Fonts
Our new API [Document.EmbedFonts API] allows you to embed fonts within Microsoft Word documents. Once fonts are embedded in a document, document appearance remains unchanged when viewed, printed, or exported on any computer [regardless of the presence of the font on the target machine]. Embedded fonts are available within the font list.
Documentation
Scheduler
Synchronize Appointments with Microsoft 365 Calendars
Our WinForms Scheduler control exposes new APIs and allows you to seamlessly synchronize user appointments with Microsoft 365 calendars [bi-directionally].
You can export appointments from the Scheduler control to Microsoft 365 calendars, import Microsoft 365 [Outlook] events to the Scheduler control, merge user appointments with Microsoft 365 calendars, and resolve merge conflicts.
Documentation
Spreadsheet
Threaded Comments
You can now manage threaded comments in code. Use the Worksheet.ThreadedComments property to add, edit, reply, and remove threaded comments [the Spreadsheet control retains comments when resaving an Excel document].
Documentation
Chart Enhancements
The WinForms Spreadsheet control can now display, print, and export [PDF] the following chart UI elements:
- Chart Markers with Solid Outlines
- Trendlines
- Data Tables
- Legends with Custom Fonts
Chart Enhancements - WinForms Spreadsheet
Use Cell Values as Data Labels in Charts
You can now use cell values as data labels for a chart. Use the CustomDataLabels.SetReference method to specify a cell range used as a reference.
- C#
chart.Series[0].UseCustomDataLabels = true;
var customDataLabels = chart.Series[0].CustomDataLabels;
customDataLabels.SetReference["C2:C4"];
You can print and export to PDF spreadsheet documents that contain charts with custom data labels.
Documentation
TreeList
HTML & CSS Templates
Our WinForms TreeList Control now supports HTML & CSS Template engine. HTML & CSS Templates allow you to create unique layouts for TreeList nodes and the TreeList itself when empty.
New API includes:
7 - A collection of HTML-CSS templates that can be applied to TreeList UI elements.
8 - Specifies the default HTML-CSS template used for nodes.
9 - Specifies the default HTML-CSS template used for a TreeList control when empty.
0 - Allows you to assign HTML-CSS templates to nodes based on a specific condition.backstageViewItem.Alignment = BackstageViewItemAlignment.Bottom;
1 - Allows you to assign HTML-CSS templates to an empty TreeList based on a specific condition.backstageViewItem.Alignment = BackstageViewItemAlignment.Bottom;
2 - Allows you to customize "templated" nodes.backstageViewItem.Alignment = BackstageViewItemAlignment.Bottom;
3 - Contains options that are applied when you use HTML-CSS Templates to render nodes.backstageViewItem.Alignment = BackstageViewItemAlignment.Bottom;
Improved Performance for Large Hierarchical Binding Lists
We optimized our WinForms TreeList control to better address important usage scenarios. We enhanced the speed and efficiency when deleting nodes and updating child collections whenever the TreeList is bound to a very large hierarchical binding list. The TreeList now performs these operations up to 20 times faster.
Accessibility and UI Automation
Scheduler Accessibility
We supported assistive tools and UI Automation patterns in our WinForms Scheduler control. The Scheduler control implements standard API used by accessibility client applications. All UI elements are labeled and properly recognized, property values are exposed, and appropriate events are raised.
Enable the
backstageViewItem.Alignment = BackstageViewItemAlignment.Bottom;
4 setting to use UI Automation patterns.
UI Templates [EAP]
DevExpress UI Templates were designed to jump start the form design/development process. With this product, you can create/deliver ready-to-use UI solutions and address a variety of line-of-business [LOB] requirements in a timely manner [and eliminate the need for routine UI customizations when using DevExpress WinForms controls].
In v23.1, we added a new Twin Button template and extended our grid-based templates with new Contact and Task List templates. Active Universal, DXperience, and WinForms subscribers can download these templates as VSIX via the DevExpress Download Manager.
After you install our UI Templates, be sure to review our Quick Start Guide for technical guidance and watch our tutorial videos:
- Introduction to WinForms UI Templates
- How to Customize UI Templates
Your Feedback Matters!
Please login to complete the survey.
Survey Completed
Thank you for taking the time to complete this survey. Your responses have now been posted. If you want to follow up with additional information, feel free to send us an email at clientservices@devexpress.com anytime.
You've Already Completed This Survey
Our records show that you have already completed this survey. If you want to follow up with additional information, send us an email at clientservices@devexpress.com.
This survey has expired
If you want to share your feedback or request new functionality, please submit a new support ticket via the DevExpress Support Center. We’ll be happy to follow up.