DevExpress WinForms 控件 v24.1
仅支持日期和时间类型
数据网格
树形列表
手风琴
功能区和条形图
数据编辑器
文档管理器
停靠库
支持 HTML 和 CSS
PDF 浏览器
富文本编辑器
SVG 滚动光标
电子表格
辅助功能和用户界面自动化
其他增强功能
性能改进
DateOnly 和 TimeOnly 类型支持
DevExpress WinForms 数据感知 UI 控件(例如我们的 Data Grid 和 TreeList)和日期编辑器现在支持DateOnly和TimeOnly数据类型(在 .NET 应用程序中)。这些数据类型具有以下优势(与传统的 DateTime 类型相比):使用清晰、数据库兼容性更高、序列化期间占用的空间更少,以及能够缓解与不同时区相关的潜在错误/不一致。
内置 DateOnly/TimeOnly 支持扩展到:
与数据过滤相关的 UI 元素(列过滤器弹出窗口、过滤器编辑器、表达式编辑器、自动过滤行)
条件格式规则
数据摘要
数据分组
未绑定列
面具
搜索
标准运算符
C# gridView.ActiveFilterString = "[Date]=#!2022-02-01!#";
我们还在基于服务器的数据源中添加了 DateOnly/TimeOnly 类型支持:
EntityServerModeSource / EntityInstantFeedbackSource
LinqServerModeSource/LinqInstantFeedbackSource
您可以根据 DateOnly 和 TimeOnly 值对服务器模式源中的数据进行排序、分组和过滤。当然,您可以在过滤表达式和未绑定列中使用与日期/时间相关的函数(例如 AddHours()、GetDays()、DateDiffDays())。
数据网格
#合并单元格编辑
顾名思义,用户现在可以同时编辑合并区域中的所有单元格,或根据需要修改单独的单元格(在 GridView 和 BandedGridView 中)。使用新的MergedCellEditMode属性可激活此功能并指定用户如何编辑合并单元格数据。

选项包括:
VisibleCells– 编辑合并范围内的数据单元格。
FocusedCell– 编辑焦点行的合并范围内的数据单元格。
Disabled
C# using DevExpress.XtraGrid.Views.Grid; // Allows users to edit data cells in a merged range. gridView1.OptionsView.MergedCellEditMode = MergedCellEditMode.VisibleCells;
#在“查找”面板中显示自定义 UI 元素
v24.1 包含新的 API,用于在“查找面板”中显示预定义和/或自定义 UI 控件。使用此新选项,您可以在使用 DevExpress 查找面板时构建完全可自定义/个性化的界面。

使用view.FilterPanelItems在你的 WinForms 应用中引入自定义的 Find Panel UI 元素:
AddControl — 显示指定的 UI 控件。
AddButton — 显示一个按钮。
AddCheckButton — 显示一个已选中的按钮。
自动高度——更新“查找面板”高度以匹配 UI 元素。
RemoveItem / RemoveItems – 从“查找面板”中删除指定的 UI 元素。
C#
// This code snippet comes from the Find Panel module in our WinForms Data Grid demo (v24.1).
CheckButton showCustomButton = null;
void ceShowCustomButton_CheckedChanged(object sender, EventArgs e) {
CheckEdit customButton = sender as CheckEdit;
if(customButton.Checked) {
showCustomButton = view.FindPanelItems.AddCheckButton(customButtonName, null, view.OptionsFind.Behavior != FindPanelBehavior.Search,
(button, args) => {
CheckButton checkButton = button as CheckButton;
view.OptionsFind.Behavior = checkButton.Checked ? FindPanelBehavior.Filter : FindPanelBehavior.Search;
checkButton.ToolTip = "Find Panel Mode";
icbFindPanelBehavior.EditValue = view.OptionsFind.Behavior;
});
showCustomButton.ImageOptions.ImageUri.Uri = "Filter;Size16x16;Svg";
}
else {
showCustomButton = null;
view.FindPanelItems.RemoveItem(customButtonName);
}
icbFindPanelBehavior.Enabled = showCustomButton == null;
}#隐藏 Excel 启发式过滤器下拉列表中的特定过滤器
WinForms 数据网格控件公开ShowFilterPopupExcel事件,并允许您从Excel 样式过滤器下拉列表的“过滤器”和“值”选项卡中隐藏特定过滤器选项。v24.1 向事件参数添加了e.HideFilter(filterType)方法,用于对过滤器菜单进行高级自定义。使用此方法可以从“过滤器”选项卡中隐藏不必要的过滤器运算符。
我们还在 WinForms TreeList 控件中引入了此功能。

C#
void gridView1_ShowFilterPopupExcel(object sender, DevExpress.XtraGrid.Views.Grid.FilterPopupExcelEventArgs e) {
if (e.Column.FieldName == "UnitPrice") {
e.HideFilter(DevExpress.Utils.Filtering.Internal.CustomUIFilterType.BelowAverage);
e.HideFilter(DevExpress.Utils.Filtering.Internal.CustomUIFilterType.Between);
e.HideFilter(DevExpress.Utils.Filtering.Internal.CustomUIFilterType.BottomN);
// ...
}
}#显示自定义 DevExpress 弹出菜单
我们使得为单个数据网格 UI 元素 显示DevExpress PopupMenu变得更加容易。

在以前的版本中,您必须在控件的事件中自定义内置菜单(添加/删除菜单项) 。使用 v24.1,您可以使用新的e.ShowCustomMenuPopupMenuShowing方法显示自定义菜单(在设计时或运行时创建和自定义):
C#
void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e) {
if (e.MenuType == GridMenuType.Column) {
popupMenu_Column.Tag = e.HitInfo;
popupMenu_Column.MenuCaption = $"{e.HitInfo.Column}";
e.ShowCustomMenu(popupMenu_Column);
}
}API 增强扩展到:DevExpress TreeList、垂直网格(属性网格)和数据透视网格。
#将细胞图像导出至 Excel
WinForms 数据网格控件现在以数据感知导出模式将绑定和非绑定列单元格内显示的图像(光栅和 SVG)导出到 XLSX 。单元格图像导出为 Byte[] 数组。要激活此功能,请将AllowCellImages属性设置为DefaultBoolean.True。
C#
void btnExport_Click(object sender, EventArgs e) {
DevExpress.XtraPrinting.XlsxExportOptionsEx options = new DevExpress.XtraPrinting.XlsxExportOptionsEx();
options.AllowCellImages = DevExpress.Utils.DefaultBoolean.True;
advBandedGridView1.ExportToXlsx("grid_export.xlsx", options);
}在网格控件生成输出文档之前,您可以自定义单元格图像或用图像替换值(基于导出条件)。处理CustomizeCell事件如下:
C#
void Options_CustomizeCell(DevExpress.Export.CustomizeCellEventArgs e) {
if(e.ColumnFieldName == "Photo" && e.Value == null) {
e.Value = XtraEditors.Controls.ByteImageConverter.ToByteArray(imageCollection1.Images["car"]);
e.Handled = true;
}
}
#计算最佳尺寸
新的CalcBestSize(maxSize, checkScrollInfo)方法 旨在解决常见的布局相关的开发任务,它可以计算网格控件的最大允许大小(以显示尽可能多的数据行和列)。
#为 DevExpress TileView (看板) 定制瓷砖绘画
现在,您可以通过处理新的TileView.CustomDrawTile事件来自定义图块外观。借助其全面的事件参数 (API),您可以轻松更改边框形状和颜色或绘制自定义 UI 元素以满足特定的设计要求/用户偏好。

是的,您可以根据需要在图块内 呈现HTML 和 CSS 模板:

#显示修剪后的条件格式规则的工具提示
如果格式规则名称大于单元格的宽度,则当您将鼠标悬停在单元格上时,该规则将显示在工具提示中:

#注释条件格式规则
使用此选项,您和您的最终用户可以为条件格式规则添加描述性文本,从而深入了解每条规则背后的目的和逻辑。为条件格式规则添加文本描述既简单又直观。用户可以直接在格式规则编辑器中添加说明,确保每次查看或更改规则时都可以查看上下文。
要启用此功能,请将OptionsView.AllowFormatRuleDescription属性设置为true。

注意:我们还在 WinForms TreeList、VerticalGrid 和 PivotGrid 控件中引入了此功能。
树形列表
#展开搜索节点
借助此新功能,用户可以轻松找到特定的 TreeList 节点,即使它们在复杂的层次结构中折叠。当用户在 DevExpress TreeList 中启动搜索时,TreeList 会自动展开相关节点以显示搜索结果(在以前的版本中,您只能通过展开的节点进行搜索)。
使用 TreeList 的OptionsFind.ExpandNodesOnSearch设置来启用/禁用“搜索时展开节点”功能。

#提高大型数据源的性能
我们改进了 WinFroms TreeList 的性能,以便更好地解决对底层数据源进行大量数据更新时的使用场景。
以下内部测试结果表明了性能的提升:

#自动过滤行焦点保留
对 WinForms TreeList 控件的这一添加可确保在使用自动筛选行时,即使在数据更新期间,用户焦点也不会受到影响。
在以前的版本中,TreeList 在更新数据时会自动关闭自动筛选行中的活动编辑器。在 v24.1 中,编辑器保持活动状态(用户可以在数据更新期间编辑筛选条件)。
手风琴
#以最小化状态显示项目标题
我们添加了一个新的CaptionShowMode属性来控制当 Accordion 控件最小化/折叠时如何显示项目标题。
选项包括:
下面的图片
上图
没有任何
新的CaptionImageIndent属性指定图像和标题之间的缩进。

#可配置项目缩进
使用此新选项,您可以引入完全个性化的侧边导航逻辑。我们添加了ChildIndentStartLevel属性。此属性指定开始子元素缩进的层次结构级别。
我们还实现了一个新的QueryElementIndent事件,允许您根据设计偏好/要求调整特定手风琴项目的缩进。

功能区和条形图
#页面关键提示
我们添加了新的ShowPageKeyTipsMode属性。使用此属性可配置 Ribbon UI 中页面键提示的显示。此增强功能让喜欢使用键盘快捷键而非鼠标输入的用户能够快速浏览不同的 Ribbon 部分并访问特定命令(无需不必要的按键)。
选项包括:
Hide- 隐藏所有功能区页面的关键提示。
ShowOnMultiplePages- 仅当 Ribbon UI 显示多页时才显示关键提示。
Show(默认) - 显示所有可见功能区页面和选定页面的关键提示(即使选定页面被隐藏)。
#BarCheckItem – 勾选状态图片
您现在可以为复选框项的选中和未选中状态指定不同的图像(位图或 SVG)(BarCheckItem)。

新的 API 包括:
已检查图像/已检查图像索引/已检查图像密钥
检查大图像/检查大图像索引/检查大图像密钥
已选中SVG图像
#按 Enter 执行命令
我们扩展了命令搜索框中可用的用户交互。用户无需额外点击或交互即可执行命令。处理新的SearchMenuEnterPressed事件,以便在用户执行搜索并按下 Enter 键时立即执行基于自由书写文本的命令或第一个找到的命令。
#在搜索菜单弹出窗口中管理和显示相关命令
我们的 Ribbon Control 公开了一个CustomizeSearchMenu事件。此事件允许您实现自定义逻辑来确定哪些命令必须出现在搜索结果中。v24.1 扩展了事件的参数以简化自定义。
新的 API 包括:
e.AddHeader(string caption)– 显示带有特定标题的页眉。
e.AddItem(BarItem item)– 在搜索结果中显示指定的命令。
e.ShowNoMatchesItem– 指定当搜索查询未返回结果时是否显示“未找到匹配项”。

C#
void ribbonControl1_CustomizeSearchMenu(object sender, RibbonSearchMenuEventArgs e) {
if(e.SearchString.ToLower() == "format") {
e.AddHeader("Text Formatting");
e.AddItem(ribbonControl1.Items["iBold"]);
e.AddItem(ribbonControl1.Items["iItalic"]);
e.AddItem(ribbonControl1.Items["iUnderline"]);
e.ShowNoMatchesItem = false;
}
}我们为那些喜欢从头开始生成搜索结果的用户引入了UseCustomRibbonSearch属性。设置为true时,我们的功能区控件不会自动填充搜索结果 ( e.Menu.ItemLinks)。在添加自己的命令之前,您无需清除预先构建的搜索结果。
使用RibbonControl.OptionsSearchMenu属性访问与搜索相关的设置。这些包括:
搜索项位置
搜索项快捷方式
使用自定义功能区搜索
#合并功能区消息 (MDI)
父窗体的 Ribbon 控件显示合并后子 MDI 窗体上显示的功能区控件的 消息(Office 启发的弹出通知和警报):
使用RibbonControl.MergedMessages属性来访问和管理合并的消息。

数据编辑器
#DateEdit – DateOnly 类型支持
我们的 WinForms DateEdit 控件现在支持该DateOnly数据类型。以下属性接受DateOnly值:
public DateOnly DateOnly { get; set; }
public object MinDate { get; set; }
public object MaxDate { get; set; }
#简单按钮 – 自定义绘画
我们实现了一个新的CustomDraw事件。处理此事件以手动绘制我们的 WinForms 简单按钮。

C#
void simpleButton1_CustomDraw(object sender, DevExpress.XtraEditors.ButtonCustomDrawEventArgs e) {
if(e.Info.State == DevExpress.Utils.Drawing.ObjectState.Hot) {
e.Cache.FillRectangle(Brushes.Orange, e.Bounds);
e.DefaultDrawImage();
e.DefaultDrawText();
e.Handled = true;
}
}#统一基于文本框的编辑器的填充设置
v24.1 在所有基于 DevExpress Textbox 的数据编辑器类型(例如 TextEdit、SpinEdit、DateEdit、MemoEdit 等)中都提供了一致的填充设置。这些设置允许您保持视觉一致性,而无需为不同的编辑器类型指定不同的填充选项。
使用Properties.TextPadding和Properties.Padding属性指定文本框内的文本和内容填充。

#MemoEdit – 增强的 WXI 皮肤可视化
我们增强了 MemoEdit 边框的可视化效果,并在 WXI Skin 中添加了滚动条着色。因此,DevExpress WinForms MemoEdit 现在支持 DevExpress Skin 颜色。

C# memoEdit1.Properties.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Question;
#区分用户修改与编辑器值的代码修改
现在,您可以区分用户所做的修改和以编程方式(在代码中)对编辑器的值所做的修改。我们向EditValueChanginge.ModifiedByUser事件的参数中添加了一个参数:
C#
void textEdit1_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e) {
if(e.ModifiedByUser) {
// ...
}
}
文档管理器
#在设计时添加内容
我们的文档管理器支持延迟加载。要利用此功能,必须在运行时在QueryControl事件处理程序 中生成文档内容。虽然此技术提供了灵活性和性能优势,但对于简单的使用场景(在设计时已知所有文档)来说,它可能很复杂。
在 v24.1 中,您可以在设计时(在 Visual Studio 中)向文档中添加用户控件和表单。

对接库
#布局恢复验证
现在, 您可以在反序列化期间确保对接布局的完整性和一致性。反序列化布局数据的不一致或损坏可能会导致意外行为、视觉伪影或应用程序崩溃。RestoreLayoutError 事件允许您防止加载损坏的布局或根据需要处理/修复与布局相关的问题:
C#
using DevExpress.Utils.Serializing;
void dockManager1_RestoreLayoutError(object sender, RestoreLayoutErrorEventArgs e) {
foreach (var exception in e.Exceptions) {
if (exception is TabContainerActiveChildNotSetException activeChildException)
activeChildException.Panel.ActiveChild = activeChildException.Panels[1];
}
e.Throw = false;
}注意:我们还在 WinForms 文档管理器 ( RestoreLayoutError ) 中添加了布局恢复验证。
HTML 和 CSS 支持
#预先编写的 HTML/CSS 代码片段
v24.1 在我们的 Visual Studio HTML 模板设计器中包含 40 个预先编写的 HTML 和 CSS 代码片段。这些是经过优化的代码片段,可解决常见的 HTML 相关任务。

代码片段包括:
基本元素(边框、图片、链接、工具提示、列表、表格)
文本和字体片段
布局片段
颜色和视觉元素
绑定片段
#对齐编辑器文本
您现在可以使用标准 CSS 属性来对齐 HTML 模板中使用的 DevExpress 编辑器内容(水平或垂直)。

PDF 查看器
#签名信息面板
使用我们新的“签名信息”面板,您可以显示已加载文档中每个签名的详细信息并验证签名的有效性。
当您打开文档时,PDF 查看器会验证签名并在签名面板中显示相关状态(有效、无效或未知)。

此外,新面板还显示以下与签名相关的信息:
文件中签名的位置
签名者信息
创建签名的原因
签署文件后签署和修改的日期和时间
证书信息
#图层
PDF 文档图层允许您选择性地查看或隐藏特定内容部分。图层的主要用途是控制 PDF 文档中呈现的图形对象在不同状态下的可见性(当您查看或打印 PDF 文档时)。
我们添加了“图层”面板以显示文档中包含的所有图层。此新功能允许您通过 UI 更改图层可见性。单击新“图层”面板中图层名称旁边的复选框可显示/隐藏给定的文档图层。可见图层使用“眼睛”图标突出显示;由于文档配置而无法隐藏的图层在其名称旁边没有复选框。

借助PDF Facade API 的强大功能,您还可以在预览或打印 PDF 文档时在运行时访问和管理图层可见性。调用PdfViewerExtensions.GetDocumentFacade扩展方法获取 PdfDocumentFacade 类对象(它允许您更改 PDF 文档而无需访问其内部结构)并使用 PdfDocumentFacade.OptionalContentVisibility集合在代码中更改所需文档图层的可见性状态。
该类PdfDocumentFacade在 DevExpress.Docs.v24.1.dll 程序集中定义。将此程序集添加到您的项目或安装 DevExpress.Document.Processor NuGet 包以使用成员。您需要DevExpress Office File API 订阅或DevExpress Universal 订阅PdfDocumentFacade的许可证才能在生产代码中使用此类。
C#
pdfViewer.LoadDocument("layers.pdf");
PdfDocumentFacade documentFacade = pdfViewer.GetDocumentFacade();
// Set visibility for each Layer
documentFacade.OptionalContentVisibility.Groups[0].Visible = false;
documentFacade.OptionalContentVisibility.Groups[1].Visible = false;
documentFacade.OptionalContentVisibility.Groups[2].Visible = true;富文本编辑器
#辅助功能 - 屏幕阅读器支持
v24.1 增加了对关键的可访问性相关要求的支持,包括辅助技术(如屏幕阅读器)读取文档正文中的文本、图像的替代文本和名称、文本框内容、页眉和页脚的能力。
#导出为可访问的 PDF
在将 Word 文档导出为可访问的 PDF 文件时,我们扩展了对以下元素的可访问性相关支持:
目录标记
元数据字段
替代文本处理
表格
漂浮物体
使用 Adobe Acrobat Pro 和 PDF Accessibility Checker 2024 进行质量控制。我们的测试文档成功通过了 PDF/UA 兼容性和 WCAG 2.1 合规性验证。
当您指定以下选项时,可立即使用与可访问性相关的导出增强功能PdfUACompatibility:
C#
using System.IO;
using DevExpress.XtraRichEdit;
//...
using(FileStream stream =
new FileStream(resultFilePath, FileMode.Create, FileAccess.Write, FileShare.Read)) {
PdfExportOptions exportOptions = new PdfExportOptions();
exportOptions.PdfUACompatibility = PdfUACompatibility.PdfUA1;
richEditControl.ExportToPdf(stream, exportOptions);
}
#装饰形状
我们为ShapeDecorative类添加了一个属性,用于将文档图形(图片、形状和图表)标记为装饰性图形。装饰性图形增加了视觉趣味,但它们并不提供信息。因此,在生成可访问文档时,您无需为装饰性对象指定 Alt Text(有意义的描述)。
#数学方程式
我们的富文本编辑器现在可在保存文档时保留数学公式。您可以在 WinForms 富文本编辑器中导入包含数学公式的 Word 文档,并将其保存为 RTF 和 OpenXml (.docx/.docm) 格式,且不会丢失内容。
注意:仅当源文档包含数学方程的后备图像时,才会打印或导出数学方程为 PDF。要抑制数学方程导入,请将 DocumentCapabilities.MathEquations属性设置为DocumentCapability.Disabled。
#装订线和镜像边距
DevExpress WinForms Rich Text Editor v24.1 允许您指定装订线边距 - 额外的空间,可确保装订不会遮挡打印页面上的文本。您可以指定装订线位置(顶部、左侧和右侧)和边距大小。使用 Document.GutterAtTop 、 SectionMargins.GutterPosition和SectionMargins.Gutter属性来满足特定的使用要求。

以下代码片段向文档的第一部分添加了左侧边距:
C#
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using DevExpress.Office.Utils;
//...
richEditControl.LoadDocument(@"Documents//Alice.docx");
Document document = richEditControl.Document;
Section firstSection = wordProcessor.Document.Sections[0];
var pageMargins = firstSection.Margins;
pageMargins.GutterPosition = GutterPosition.Left;
pageMargins.Gutter = Units.InchesToDocumentsF(1);
richEditControl.SaveDocument("Alice_formatted.docx", DocumentFormat.OpenXml);我们新的Document.MarginType属性允许您定义常规或镜像边距类型。如果您在纸张的两面打印并希望装订打印件,请启用镜像边距。
以下代码片段启用了镜像边距并指定了额外的空间值:
C#
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using DevExpress.Office.Utils;
//...
richEditControl.LoadDocument(@"Documents//Alice.docx");
Document document = richEditControl.Document;
// Enable mirrored margins
document.MarginsType = MarginsType.Mirrored;
foreach (Section section in richEditControl.Document.Sections) {
var pageMargins = section.Margins;
// Set the value for mirrored margins
pageMargins.Gutter = Units.InchesToDocumentsF(0.5f);
}
richEditControl.SaveDocument("Alice_formatted.docx", DocumentFormat.OpenXml);还有新的 UI 元素可用。
#图片导出API
v24.1 包含新的跨平台 API,用于将 Word 文档页面导出为图像。此新功能允许您生成文档预览。使用我们的新 API,您可以将文档页面转换为光栅和矢量图像(PNG、JPEG、BMP、多页 Tiff、emf),将它们保存为磁盘上的物理文件或获取图像流列表以便在代码中进一步处理。您还可以设置图像背景颜色、修改输出图像分辨率或生成具有指定大小的缩略图。
新的 API 可通过对象的RichEditDocumentServerExtensions.ExportToImageDocument扩展方法获得。
请注意,该类RichEditDocumentServerExtensions是在 DevExpress.Docs.v24.1.dll 程序集中定义的。将此程序集添加到您的项目或安装“DevExpress.Document.Processor”NuGet 包以使用成员。您需要DevExpress Office File API 订阅或DevExpress Universal 订阅RichEditDocumentServerExtensions的许可证才能在生产代码中使用此类。
以下代码片段将文档的第一页导出为具有指定大小和 JPEG 格式的图像:
C# using DevExpress.XtraRichEdit; using DevExpress.XtraRichEdit.Export.Image; using DevExpress.Drawing; richEditControl.LoadDocument(@"C:\Documents\Alice.docx"); //... RichEditImageExportOptions options = new RichEditImageExportOptions(); options.Format = DXImageFormat.Jpeg; options.PageRange = "1"; options.LargestEdgeLength = 1080; richEditControl.Document.ExportToImage(@"C:\Documents\Image.jpeg", options);
#将文档页面导出为 SVG
我们新的图像导出 API 允许您将文档页面导出为 SVG。使用该RichEditImageExportOptions.Format选项将 SVG 设置为目标图像格式。
C# RichEditImageExportOptions options = new RichEditImageExportOptions(); options.Format = DXImageFormat.Svg; options.PageRange = "1"; richEditControl.Document.ExportToImage(@"C:\Documents\Image.svg", options);
用户界面还可以进行 SVG 导出 - 打开“打印预览”对话框,单击“导出到图像”按钮,在“图像选项”对话框中选择 SVG 格式并完成文档导出。
SVG 滚动光标
具有可滚动内容的 WinForms 数据感知控件现在附带与 DPI 无关的滚动光标(用户按下鼠标中键时出现的光标),无论屏幕分辨率如何,都能提供流畅、精确的导航。
电子表格
#辅助功能增强功能 - 装饰形状
我们为ShapeDecorative类添加了一个属性,用于将文档图形(图片、形状和图表)标记为装饰性图形。装饰性图形增加了视觉趣味,但它们并不具有信息性。因此,在生成可访问文档时,您无需为装饰性对象指定 Alt Text(有意义的描述)。
#对齐和分布式文本对齐
v24.1 增加了对电子表格单元格内对齐和分布式水平对齐类型的支持。使用这些对齐选项的 Excel 文件可以打印并导出为 PDF。
您可以使用Cell.Alignment.Horizontal属性在代码中指定水平对齐。

以下代码片段在代码中指定对齐:
C#
var workbook = new Workbook();
var worksheet = workbook.Worksheets[0];
Cell cellA1 = worksheet.Cells["A1"];
cellA1.Value = "Justified and top";
cellA1.Alignment.Horizontal = SpreadsheetHorizontalAlignment.Justify;
cellA1.Alignment.Vertical = SpreadsheetVerticalAlignment.Top;
workbook.ExportToPdf("Result.pdf");
#按颜色排序和过滤
DevExpress WinForms 电子表格附带增强的过滤和排序相关功能。我们添加了新的 API,可以按背景和字体颜色对工作簿数据进行排序和过滤。按单元格颜色过滤/排序的单元格范围也可以打印并导出为 PDF。
我们的排序 API 包括新的Worksheet.Sort方法重载,旨在按字体颜色或填充设置(背景颜色和图案)对指定范围进行排序。
以下代码片段对两个单元格范围内的单元格值进行排序 - 第一个单元格按红色字体颜色排序,第二个单元格按范围内第一个单元格指定的填充设置排序:
C#
spreadsheetControl.LoadDocument("sort-filter.xlsx");
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
// Sort cell range by font color
worksheet.Sort(worksheet["B2:B10"], Color.Red);
// Sort cell range by fill color
worksheet.Sort(worksheet["D2:D10"], worksheet["D2"].Fill);要按字体或背景颜色过滤单元格,您需要将自动过滤器应用于所需的单元格范围或表格。完成后,您需要从集合中获取所需的列AutoFilter.Columns并调用以下方法之一:
AutoFilterColumn.ApplyFillColorFilter(颜色)
AutoFilterColumn.ApplyFillFilter(填充)
AutoFilterColumn.ApplyFontColorFilter(颜色)
以下代码片段对单元格范围和表格都使用了这些方法:
C#
spreadsheetControl.LoadDocument("sort-filter.xlsx");
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
// Apply an auto-filter to a cell range and filter the first column by font color
worksheet.AutoFilter.Apply(worksheet["B1:B10"]);
worksheet.AutoFilter.Columns[0].ApplyFontColorFilter(Color.Red);
// Create a table, apply an auto-filter and filter the first column by fill color
Table table = worksheet.Tables.Add(worksheet["B12:B21"], true);
table.AutoFilter.Apply();
table.AutoFilter.Columns[0].ApplyFillColorFilter(Color.Red);此外,我们的新 API 允许您在过滤范围内对数据进行排序(启用自动过滤时)并同时按单元格的值/颜色对其进行排序(使用排序条件)。
#将单元格范围导出至 SVG
在此版本中,我们增强了CellRangeExtensions.ExportToImage方法并增加了对 SVG 图像格式的支持。
该类CellRangeExtensions在 DevExpress.Docs.v24.1.dll 程序集中定义。将此程序集添加到您的项目或安装 DevExpress.Document.Processor NuGet 包以使用CellRangeExtensions成员。要在生产代码中使用此类,您需要一个有效的DevExpress Office File API或DevExpress Universal Subscription。
C#
spreadsheetControl.LoadDocument("InvestmentPortfolio.xlsx", DocumentFormat.Xlsx);
Worksheet worksheet = spreadsheetControl.ActiveWorksheet;
worksheet.Range["B18:I30"].ExportToImage("cell_range_image.svg", ImageFileFormat.Svg);用户界面还可以进行 SVG 导出 - 打开“打印预览”对话框,单击“导出到图像”按钮,在“图像选项”对话框中选择 SVG 格式并完成文档导出。
可访问性和 UI 自动化
#无障碍键盘导航
TabPane 和 NavigationPane
我们为 WinForms TabPane 和导航窗格控件添加了键盘导航支持(与 XtraTabControl 非常相似)。键盘焦点现在按如下方式管理:
Right/ Left Arrow— 激活下一页/上一页。
Ctrl+ Tab/ Ctrl+ Shift+ Tab— 激活下一页/上一页并聚焦页面上显示的选项卡标题或 UI 控件。
Home— 激活第一页。
End— 激活最后一页。
附加 API 包括:
AllowNavigationThroughPages— 激活此选项可在用户使用 Tab 键导航时聚焦选项卡标题(而不是页面上显示的 UI 控件)。默认情况下,此选项处于禁用状态。
ShowHeaderFocus— 显示/隐藏焦点矩形。
BarEditItems 中基于文本框的数据编辑器
我们改进了功能区 UI 和工具栏中的键盘导航。现在可以适当地管理键盘焦点,以模仿 Microsoft Word 中的行为。具体来说,当 BarEditItem 获得焦点并且用户按下箭头键时,BarEditItem 会保留焦点,从而允许在编辑器内导航。

v24.1 公开了新的属性,允许您隐藏带有嵌入式编辑器(BarEditItem)的栏项的 键盘键(Alt或):Control
BarManager.SuppressModifierKey — 此全局设置指定表单中所有 BarEditItem 的行为。
BarEditItem.SuppressModifierKey — 指定特定 BarEditItem 的行为。
以下示例激活了 MS Word 启发的行为,用于带有组合框的栏项。用户无需使用Alt+DownArrow组合来打开下拉菜单,只需按DownArrow:

C#
public Form1() {
InitializeComponent();
barItemCombobox.SuppressModifierKey = DevExpress.XtraEditors.SuppressKeys.Alt;
}基于 ButtonEdit 的编辑器
我们优化了与 ButtonEdit 相关的控件中的键盘焦点,以确保其遵循逻辑且直观的顺序。用户可以轻松地从编辑框切换到按钮,使用Left/Right键浏览按钮,按下按钮(Enter/ Space),然后按 Tab 返回编辑框(Escape或Shift+ Tab)。

使用WindowsFormsSettings.KeyboardNavigationExtension属性为 DevExpress TabPane、NavigationPane 和应用程序内的所有 ButtonEdit 控件启用此行为。
C#
public Form1() {
InitializeComponent();
DevExpress.XtraEditors.WindowsFormsSettings.KeyboardNavigationExtensions = DevExpress.XtraEditors.KeyboardNavigationExtensions.All;
}使用AllowButtonNavigation属性为特定的 ButtonEdit 控件启用键盘导航。
其他选项包括:
就地模式支持
支持从右到左模式
高级模式支持
WinForms TileView(看板)
最终用户现在可以使用键盘聚焦平铺组页眉/页脚按钮,并使用箭头键进行左/右导航。
WinForms 图表控件
我们改进了 DevExpress WinForms Diagram 控件中的键盘导航。用户现在可以使用以下键盘键:
Ctrl+ +– 放大画布。
Ctrl+ -– 缩小画布。
Ctrl+ Space– 展开/折叠焦点容器。
F4– 打开属性窗口。
列过滤器弹出窗口
当用户打开 Excel 筛选弹出窗口时,弹出窗口会自动获得焦点。用户可以使用键盘在弹出窗口 UI 元素之间导航。
#屏幕阅读器相关增强功能
v24.1 改进了我们 WinForms UI 控件库的可访问性。屏幕阅读器(例如 Narrator 和 NVDA)现在可以读出以下用户操作和属性:
检查数据网格列自定义菜单中的项目。
展开/折叠 DevExpress Accordion Control 中的项目。
在 DevExpress Grid 自动过滤行中指定条件。
在标记编辑器中聚焦标记(屏幕阅读器发音标记)。
在 DevExpress WinExplorer 视图中聚焦一个组。
聚焦 DevExpress Grid 新项目行中的一个单元格。
在 DevExpress CardView 中浏览卡片字段。
文本编辑.属性.高级模式选项.标签
TextEdit.Properties.NullValuePrompt
其他增强功能:
当用户在表达式编辑器中输入不正确的表达式时,屏幕阅读器会读出错误消息。

当用户使用集成的“查找面板”搜索特定信息时,屏幕阅读器会读出搜索结果的数量。

#Ribbon UI 和工具栏中的 AccessKey 和 AcceleratorKey 支持
功能区 UI 元素(栏项、功能区页面、BackStageView、组标题按钮和应用程序按钮)现在公开以下与可访问性相关的属性:
AccessKey在 MSAA 和 UI 自动化中
AcceleratorKey在 UI 自动化中。
注意:我们根据 ItemShortcut 等属性的值设置这些属性。
其他增强功能
#按键/名称分配图像
图像选项包括一个新的ImageKey字符串设置。使用它可以通过图像的“名称”指定图像。与 不同ImageIndex,在 中,添加或删除图像会更改集合中现有图像的位置(需要ImageIndex更新属性),而ImageKey属性会标识图像,而不管其在集合中的位置如何(通过图像名称在集合中进行搜索)。
注意:ImageKey优先于ImageIndex(如果同时指定了两个属性)。
性能改进
#改进的 Windows 窗体进程外设计器
过去几个月,我们与微软开发团队保持密切合作,微软最近发布了 Visual Studio 2022 更新,该更新提高了多种 .NET Core/.NET 使用场景中的表单加载性能。
这些性能增强与任何 DevExpress 版本无关,因为它们是在 Visual Studio 核心级别实现的(基于我们与有问题的内部例程相关的反馈)。来自 Microsoft发行说明:
通过与重要合作伙伴的卓有成效的合作,我们很高兴地宣布 WinForms 服务器进程的重大改进TypeResolutionService。这些改进带来了显著的设计时性能改进,在典型的业务线应用程序中,改进幅度从 30% 到令人印象深刻的 50% 不等。值得注意的是,这些改进在触发服务器进程重新启动和设计器重新加载的场景中尤其突出,例如项目重建或项目引用的调整。
这些性能改进的核心在于我们团队实施的一种新机制,该机制优先考虑对设计器负载至关重要的程序集。我们鼓励您探索更新的设计器并通过VS 反馈渠道分享您的宝贵反馈,以便我们继续改进 WinForms 设计器的性能。
您可以使用以下较小的包(如 DevExpress.Win.Grid、DevExpress.Win.TreeList、DevExpress.Win.Charts 等)代替大型DevExpress.Win.Design包, 从而将设计器启动时间缩短 1-2 秒(如果您不需要在表单上同时使用所有 DevExpress WinForms 组件) 。
渝公网安备50010702505508