各位朋友,秋天是我们团队准备 EMX Controls(面向 Avalonia UI 的控件库)新版本发布的时候。这款产品我们已经持续开发了近 5 年,为大家提供功能丰富的可视化组件,用于开发运行在 Windows、macOS、国内外各类 Linux 发行版以及 WebAssembly 上的图形界面。
在新版本中,我们为 Data Grid 和 Tree List 控件加入了用户呼声最高的功能之一,扩展了视觉主题,新增了用于处理窗口和对话框的服务,还有更多改进。
1.5 正式版将在近期发布,目前可以先使用 preview 预览版。欢迎大家试用这套控件库,最简单的方式是下载并运行演示应用程序。
Data Grid 和 Tree List 控件中的汇总(Summary)
Data Grid 和 Tree List 控件用于显示和编辑表格数据(平面列表和层级多列列表)。同时,用户还可以借助它们进行简单的可视化数据分析(例如通过排序、分组和筛选功能)。从 1.5 版开始,这些分析工具中新增了汇总(Summary)计算功能。现在可以对任意列直接计算汇总,并且同一列可以同时显示多个汇总。
- 开箱即用的汇总类型:求和、最小值、最大值、平均值和计数
- 自定义汇总算法 —— 通过
CustomSummary事件可以指定自己的计算函数。 - 同一列多个汇总 —— 每一列都可以计算任意数量的汇总。
- 在其他列中显示汇总 —— 基于某一列计算的汇总可以显示在另一列中。
另外值得一提的是,用户可以在运行时自行管理汇总。
- 用户可以通过 Σ 按钮打开下拉列表来添加汇总。
- 为了更灵活地管理汇总(调整顺序、在其他列中显示),我们实现了一个简单的汇总编辑器。
当前的 preview 版本支持对全部记录计算汇总。很快我们还会在 Data Grid 控件中加入分组汇总,即在分组模式下按行分组计算汇总。
视觉主题调色板
与 Avalonia 中的大多数主题一样,EMX Controls 的视觉主题支持浅色和深色两种模式。在新版本中,我们扩展了视觉主题,在基础调色板之外又新增了 9 种调色板。全部 10 种调色板都支持浅色和深色模式,因此用户可以从 20 种配色方案中任选其一。
切换调色板时,以下界面元素的颜色会随之更新:
- 窗口、面板和容器的背景。
- 编辑器在各种状态下的背景。
- 表格控件中行和单元格的背景。
- 选中、鼠标悬停高亮以及焦点元素的强调色。
- 以及更多其他元素。
您还可以在应用程序中加入调色板切换器,让用户自行选择喜欢的配色方案。为此,我们在新版本中新增了一个专门的服务。
界面密度
很多场景下需要在应用窗口中放下尽可能多的信息,这就需要缩小间距、调整可视元素的字号。在 1.5 版中,我们为 DeltaDesign 主题加入了界面密度设置。开发者现在可以从三种预设模式中选择:Compact(紧凑)、Standard(标准)和 Spacious(宽松)。
应用程序服务
新版 EMX Controls 为 MVVM 应用提供了 Application Services(应用程序服务)。这是一组服务,可以直接在 ViewModel 中操作窗口、对话框和主题设置,而无需直接引用 Avalonia 的类型。
什么是服务?
服务是一个实现特定接口的对象。ViewModel 通过这个接口调用服务来执行某个操作:显示对话框、打开窗口、请求用户确认等。ViewModel 本身不持有窗口、对话框类型或其他特定对象的引用,这些工作都由服务在被调用时完成。
用于与用户交互的服务:
- IMessageBoxService —— 显示带有固定按钮组合(Ok、Yes/No、Yes/No/Cancel 等)的标准消息框;
- IDialogService —— 显示模态对话框,其内容和按钮在 ViewModel 中定义;
- IChoiceDialogService —— 显示带有任意按钮组合的对话框,并返回所点击按钮的结果;
- IWindowService —— 打开由其他 ViewModel 定义的非模态窗口。
用于处理文件的服务:
- IOpenFileDialogService —— 以同步或异步方式显示系统的“打开文件”对话框;
- ISaveFileDialogService —— 以同步或异步方式显示系统的“保存文件”对话框。
基础设施服务:
- IWindowsManager —— 跟踪应用程序当前的活动窗口。其他服务会自动调用 IWindowsManager,以确定所显示的消息框、对话框和窗口的所有者;
- IAppearanceService —— 管理当前视觉主题的设置:切换调色板、在浅色和深色模式之间选择,以及设置界面密度。
图表
我们为图表可视化控件(CartesianChart —— 笛卡尔坐标图、PolarChart —— 极坐标图、SmithChart —— 史密斯圆图)新增了线条的精细设置选项。现在可以轻松设置线宽、线型(例如虚线)、线端形状等。
Docking UI
DockManager 组件新增了 CustomizeDockGuide 事件,可以在拖动面板时控制停靠提示(dock guide)。借助该事件,可以动态隐藏部分停靠提示,从而禁止特定的面板停靠操作。
其他改进
-
Data Grid 和 Tree List —— 列选择器(Column Chooser)窗口中新增了
(Select All)命令,可以一次性全选或取消全选所有列。 -
Data Grid 和 Tree List —— 现在可以订阅
DragOver事件,以支持将行拖放到空白区域(所有行的下方)。拖放到该区域的行会被添加到列表末尾。 -
SpinEditor —— 新属性
AllowRoundOutOfRangeValue会在输入值超出范围时,自动将其取整为最接近的有效值。 -
Graphics3DControl —— 在 macOS 上通过 Apple Metal 实现硬件渲染
新版 Graphics3DControl 改为使用 Apple Metal API 进行硬件渲染。此前使用的是软件渲染,现在绘制工作由 GPU 完成。
dotnet new 新项目模板
我们新增了几个项目模板,其中包括带应用程序服务(Application Services)的应用模板。为方便使用,我们缩短了模板的短名称,现在统一以 emx 开头。
- Eremex Avalonia .NET App(
emx.app)—— 已引用 EMX Controls 控件库的基础 Avalonia 应用。 - Eremex Avalonia .NET MVVM App(
emx.mvvm)—— 基础 MVVM 应用,UI 和业务逻辑分为 View 和 ViewModel 两层。 - Eremex Avalonia .NET App with Application Services(
emx.services)—— MVVM 应用,ViewModel 通过服务来显示对话框、选择文件和管理主题。 - Eremex Avalonia .NET MDI App(
emx.mdi)—— 基于 Docking UI 库(DockManager组件)构建的多文档界面(MDI)应用。 - Eremex Avalonia Window(
emx.window)—— 空白的MxWindow窗口(支持 Eremex 视觉主题的窗口)。
要安装 preview 版本中的模板,请执行以下命令:
dotnet new install Eremex.Avalonia.Templates@1.5.53-preview3
之后只需一条命令即可创建新项目,例如:
dotnet new emx.services -n MyApp
自动化测试
我们还对 EMX Controls 的自动化测试进行了大幅改进。目前我们的测试数量已经超过了 Avalonia UI 本身的测试数量。我们迁移到了 MTP(Microsoft Testing Platform),并借此在 CI 中新增了 macOS 和 WASM 两个平台。现在每一次提交都会在 Windows 10、Windows 11、Linux、macOS 和 WASM 上进行验证。
单个 merge request 的 CI 流水线:9 个作业,43 909 个测试,耗时约 21 分钟。
面向开发者和 LLM 的文档
MCP 服务器
越来越多的开发者借助 AI 助手编写代码。为了让 AI 助手了解我们的控件,我们部署了自己的 MCP 服务器。除了文档、示例和 API Reference,它还包含我们支持中心公开工单中的信息。将它接入您的 AI 助手后,助手就能基于最新数据回答有关 EMX Controls 的问题。
除了 MCP,我们还让 eremexcontrols.net 网站不仅方便人阅读,也方便大语言模型读取:我们添加了专门的索引,并为所有文章提供了 md 版本。
API Reference
文档中新增了 API Reference。
文档开源
应用户要求,我们已将文档发布到公开仓库:github.com/Eremex/cont…。您可以在本地部署文档,包括部署在无法访问互联网的隔离内网环境中。
演示应用程序
我们提供了一个演示应用程序,这是了解 EMX Controls 控件库功能的最佳方式之一。新增和更新的示例都带有特殊标记。
我们还为 macOS 单独准备了一个演示程序版本,下载后即可直接运行。
在 MacBook Air 上运行的演示程序:Graphics3D Control 示例启动后即可使用,无需额外配置。
如何创建新项目
如果您还没有使用过 EMX Controls,可以通过模板轻松创建新项目。nuget.org 上的包是功能完整的已签名程序集。使用以下命令即可基于这些程序集从模板创建项目:
dotnet new install Eremex.Avalonia.Templates@1.5.53-preview3
dotnet new emx.mvvm -n MyApp
试用
60 天试用期可以让您深入了解 EMX Controls 控件库。在购买许可证之前,所有控件和功能均可完整使用,与正式授权版的唯一区别是应用程序右下角会显示一个小的试用提示条,没有任何其他限制。
开放代码
EMX Controls 的程序集经过签名,并且刻意没有进行混淆,因此您随时可以用 ILSpy 查看实现细节。nuget.org 上的包可以顺利迁移到隔离内网环境中并完整运行,开发者许可证支持离线激活。如果项目需要源代码,我们也可以提供。
开源项目免费许可证
在此提醒大家:如果您正在开发开源项目,可以免费获得 EMX Controls 的非商业许可证。请通过开源项目许可申请服务提交申请。条件很简单:
- 项目托管在 GitHub 上,且 README 中包含指向 eremexcontrols.net 的链接
- 项目使用 EMX Controls,并采用 MIT、Apache 2.0、BSD 2-Clause、BSD 3-Clause、ISC 或 MSPL 许可证之一发布。
许可证与项目名称和控件库的主版本号绑定(两者变更时需要重新申请)。免费许可证的技术支持可能有限。详情请参阅 “Licensing” 部分。
实用链接
结语
欢迎大家试用 EMX Controls 控件库的 1.5 新版本,现已在 nuget.org 上发布。一如既往,我们期待您的反馈和建议。您的反馈帮助我们确定优先级、持续改进产品。敬请关注。