逐像素校验
每个变体、尺寸与状态都会与浅色、深色下的参考渲染图比对,每次改动覆盖 6,300 多个用例。
一套为 Avalonia 原生控件打造的主题,采用 shadcn/ui 的 Nova 风格,并补上 Avalonia 缺少的控件与功能:92 个组件,支持浅色、深色以及 GPUI Kit 的 36 套配色主题;每个变体、尺寸与状态都逐像素校验,动效逐帧校验。
<uikit:UIKitTheme /><Window xmlns="https://github.com/avaloniaui"
xmlns:uikit="using:AvaloniaUIKit"
Title="Hello, World!">
<uikit:Form Width="360">
<uikit:FormField Label="Name">
<TextBox PlaceholderText="Enter your name" />
</uikit:FormField>
<uikit:FormField Label="Plan">
<ComboBox SelectedIndex="0">
<ComboBoxItem Content="Free" />
<ComboBoxItem Content="Pro" />
</ComboBox>
</uikit:FormField>
<uikit:Form.Footer>
<Button Classes="primary" Content="Let's Go!"
Click="OnGo" />
</uikit:Form.Footer>
</uikit:Form>
</Window>能力
只有每个状态都成立,外观才算完成;因此每个状态都会渲染、比对,并在两种主题下留存。
每个变体、尺寸与状态都会与浅色、深色下的参考渲染图比对,每次改动覆盖 6,300 多个用例。
过渡由弹簧驱动,动画与参考实现逐帧比对,而不是靠肉眼判断。
其中 48 个组件由 UIKitTheme 替换 Avalonia 控件的 ControlTheme:颜色、内边距、轮廓、内部布局、状态与动画。
uikit: 命名空间下新增 43 个控件,从 Badge、Stepper 到带搜索的 Select 和虚拟化 Tree;还有为 Avalonia 原生控件补充能力的附加属性,例如带加载状态的 Button。
主包提供 TableView;可选包为 Avalonia 的 DataGrid 带来排序与列宽调整。
Default Light、Default Dark,以及 GPUI Kit 同捆的 36 套主题(包括 Aurora 的渐变)。通过 RequestedThemeVariant 为整个应用或任意局部切换。
组件使用的图标以编译后的几何数据提供,供 PathIcon 使用,并提供与控件匹配的四种尺寸。
只使用编译绑定,不使用反射。每次改动都会运行 NativeAOT 冒烟测试,在两种主题下渲染每个控件。
同样的控件通过 Avalonia 的 WebAssembly 后端运行在浏览器中。本站的每个演示都是实时运行的。
四个包,一套主题。
UIKitTheme 覆盖 Avalonia 内置控件与新增控件。Avalonia 将 ColorPicker 和 DataGrid 作为独立包发布,本库同样如此;Dock.Avalonia 的主题也单独成包,应用不会引入用不到的依赖。
为 Avalonia 原生控件提供 UIKitTheme,并包含 uikit: 控件与附加属性、颜色令牌和图标。
<Application.Styles>
<uikit:UIKitTheme />
</Application.Styles>UIKitColorPickerTheme 为 ColorPicker 包带来色块或带调色板弹出层的输入框外观。主包中的 uikit:ColorSelect 则两者都不需要。
<Application.Styles>
<uikit:UIKitTheme />
<uikitcolor:UIKitColorPickerTheme />
</Application.Styles>UIKitDataGridTheme 为 DataGrid 带来与 TableView 一致的数据表格外观,并保留 DataGrid 自身功能。
<Application.Styles>
<uikit:UIKitTheme />
<uikitgrid:UIKitDataGridTheme />
</Application.Styles>UIKitDockTheme 为 Dock.Avalonia 的停靠控件带来标签栏、标题栏、分隔手柄与拖放目标。
<Application.Styles>
<uikit:UIKitTheme />
<uikitdock:UIKitDockTheme />
</Application.Styles>原则
行为属于 Avalonia。
外观与动效属于主题。
UIKitTheme 只替换每个控件的 ControlTheme,不改动控件本身:行为、输入处理、无障碍与 API 都保持 Avalonia 原样。缺失的能力只在应用主动使用时补充:要么设置一个附加属性,要么放置一个 uikit: 控件。
探索组件