CodeWF.Toolkit 文档
dotnet9
CodeWF.Toolkit / 文档 / 窗口与演示

窗口与演示

⏱ 预计阅读 6 分钟 适用于 net10.0 来源: CodeWF · docs/NativeDemo.md ✎ 在 GitHub 编辑此页

# CodeWF.Toolkit 原生 Demo

当前版本 1.0.0.25。Demo 使用 Ribbon + Dock,以单个帮助类或公开 API 为导航单位:9 个分类、52 个页面。目录由 design/catalog.json 统一维护,它也是 Demo 的构建输入,不能在构建前删除。

窗口与演示

  • 每个演示是一个 Dock Document;内部使用 Grid + GridSplitter 放置内容和属性面板。分屏、浮动、重新停靠时使用 Dock 官方内容回收模板,保留同一份视图、参数和属性状态。
  • 文档组位于独立且不可折叠的中央比例容器内。文档分屏后再浮动,不会把导航区一起归一化;回归同时检查默认份额和手动调整后的份额及实际宽度。
  • 首屏聚焦真实功能、输入和结果,源码按需展开;介绍页提供全局设置,其他页面仅显示自身参数。
  • Ribbon 组只显示标题;主命令图标 32×32,快捷图标 16×16、点击热区 30×30。密集分组双行排列,窄窗口可以横向滚动。
  • 属性面板使用 Semi 图标,搜索独占下一行。名称列默认 118px、行高 31px;横竖分隔线支持拖动调整列宽和行高。文本、数值、下拉编辑器铺满值单元格,默认无边框;下拉文本左对齐。

外观与国际化

标题栏只保留一排八色点,不再重复放置配色下拉。配色包括 .NET 紫、AI 极光、AI 赤陶、默认蓝、水生、沙漠、黄昏和夜空。

模式直接复用 Ursa ThemeToggleButton,按系统 → 浅色 → 深色循环。按钮放在独立 ThemeVariantScope 中,通过 StudioThemeModeConverter 绑定原有模式;应用仍由 StudioThemeController 管理自定义配色和系统主题变化,按钮不会把配色重置成默认主题。

语言图标点击后展开语言列表,文本左对齐。列表来自宿主的语言集合,增加语言无需重写标题栏控件;当前 Demo 提供简体中文和英文。

全局只使用 CodeWF.Toolkit.Lang.I18nManager.Instance。库的 JSON 内嵌程序集,宿主的 JSON 输出到 I18n/,优先级为宿主输出 > 外层库 > 内层库;强类型键由 T4 生成。宿主正常加载资源后即可同键覆盖库文案,无需 resolver 或事件桥接。

验证与发布

powershell
pwsh scripts/sync_localization_keys.ps1 -Check
pwsh scripts/publish_toolkit_demo.ps1 -RuntimeIdentifier win-x64
# 本机并行开发可增加 -BuildArtifactsPath E:/github/temp/CodeWF.Toolkit-build
# 并以 -OutputDirectory E:/github/temp/CodeWF.Toolkit-publish 指定独立空目录

scripts/demo-verification 加载真实 App、XAML 和 Skia,在锁屏期间离屏运行;验证八色点、Ursa 内部按钮的实际点击、语言列表、1120/1440 宽度,以及 Dock 分屏 → 浮动 → 重新停靠。页面覆盖 1664 个页面/语言/配色组合。渲染数量只表示覆盖范围,不代表全页视觉还原率。

1.0.0.25 库级回归通过 242 项测试,另有 3 项打开目录或浏览器的手动用例显式跳过。新增 AppConfigHelper 批量读写的独立文件与快照回归,验证未更新配置、XML 节与注释保留,以及固定文化转换;UI 验证器的布局、日志和配置通过 CODEWF_TOOLKIT_DEMO_DATA_DIRECTORY 写入独立输出目录,不读取日常 Demo 布局。12 个 NuGet 主包和对应符号包统一为 1.0.0.25,核对目标程序集与内部依赖版本;本机验证源配置保存在仓库之外。

2026-10-16 的 1.0.0.25 执行仓库脚本完成正式 Windows x64 NativeAOT 发布,并运行实际 EXE 的自检,确认版本、两语输出资源、全部 52 条内嵌目录及用户配置未被修改。独立 NativeAOT UI 验证器通过 1664 组页面/语言/配色渲染、34 次帮助类实际调用,以及八色三态、动态切语、真实语言下拉框、属性编辑器隐藏分支和文档分屏/浮动/回停回归。随后运行原生配色审计,覆盖 16 种模式、736 次文字对比度测量,失败数为 0;检查包括真实通知计数与不同通知状态、Ribbon 状态、命令面板和场景标记。

本轮通过仓库外的临时 NuGet 配置和独立缓存消费冻结的 12.1.4.25 Avalonia 包,保留实际消费包的来源与 SHA-256 收据;本地源不写入仓库。产品和验证器共 318 个源码与构建输入文件的 SHA-256 在最终运行后复核一致。相同源码在另一构建路径重打的包可能有不同文件字节,收据分别记录实际缓存和最终本地 feed,不混用两者的哈希。

本轮也用仓库原有 Inno Setup 脚本编译 CodeWF.Toolkit.Demo-v1.0.0.25-win-x64-setup.exe,并生成 SHA-256 文件。独立暂存目录中的程序与已验证正式 EXE 的哈希相同,排除 PDB;原安装脚本保持不变。安装器仅编译,没有执行或进行人工安装。

正式 Demo 的 --verify-runtime <独立目录> 不启动窗口、不读取用户配置。Windows 发布流水线在制作安装器前执行该检查;它与加载真实控件的 UI 验证器分别验证正式产物与界面行为。

Windows 本机执行仓库发布脚本,再运行 NativeAOT 验证器并制作 EXE 安装包。发布工作流分别在对应平台生成 win-x64、linux-x64、linux-arm64、osx-x64、osx-arm64 的 EXE / DEB / DMG 和 SHA-256;不提供便携压缩包。

交付原型为 design/ 下自包含单 HTML,内嵌全部运行资源,可复制到空目录离线交互。审计实际点击全部路由、色点、三态按钮和语言菜单;窗口框架支持最小化、最大化、关闭与恢复。

README 的停靠、浮动两张 PNG 于 2026-10-16 更新为 1.0.0.25 NativeAOT UI 验证器的原始 Skia 捕获,复制前后 SHA-256 相同。其余普通页面 PNG 与主题巡览 GIF 保留 1.0.0.24 的历史真实控件截图,JSON、表格与文件系统截图保留实际运行结果;不把旧媒体标作本轮产物。详见截图来源与边界。

验收边界

浏览器原型不运行 .NET、原生窗口、网络后端或系统安装。字体度量、Dock 页签与窗口按钮受平台和第三方模板影响,页面非空和局部几何通过均不能视为达到 95% 全页还原。

本轮后台验证不会操作锁屏桌面。人工鼠标拖出、多 DPI、跨屏、输入法及安装器交互仍需在桌面可用时补充;Linux/macOS 的构建与安装结构由对应 CI 验证,本机没有运行它们的 UI。Demo 将传递 XAML Loader 固定到 Avalonia 12.1.4,避免混用 11.x 解析器。旧 Prism 8 的未使用 DialogWindow 路径仍有缺失绑定方法的 AOT 警告,Prism/DryIoc 等也有裁剪分析警告;保留原反射元数据配置,验证结果只覆盖实际调用路径。