图标
GPUI Kit 同捆的每个 Lucide 图标,以几何数据提供给 PathIcon 与 uikit:Icon:主题自带组件用到的图标,包的生成器会补充应用用到的其他图标。
组件绘制 Lucide 图标。IconName 涵盖了 GPUI Kit 同捆的每个图标:Lucide 1.43.0 的 1,818 个图标,以及 GPUI Kit 自有的 12 个(标题栏按钮、Github、ResizeCorner 等)。它们都是 StreamGeometry 资源,因此应用放在组件旁的图标与组件完全一致,运行时也不需要 SVG 解析器(几何数据编译进程序集,适合 NativeAOT)。Lucide 使用 ISC 许可证;许可证随包提供于 THIRD-PARTY-NOTICES.md。
用法
uikit:Icon 按名称绘制图标:Kind 是一个 IconName。图标为 16px(medium 尺寸),并使用 Foreground:
<uikit:Icon Kind="Search" />
<uikit:Icon Kind="TriangleAlert"
Foreground="{DynamicResource UIKit.Warning}" />xsmall、small 和 large 样式类提供其他尺寸,分别为 12、14 和 24px:
<uikit:Icon Classes="small" Kind="ChevronDown" />
<uikit:Icon Classes="large" Kind="Bell" />拼错的 Kind 会导致编译失败,正如编译版 XAML 中的任何枚举值一样。uikit:Icon 本身就是 PathIcon,而 PathIcon 也可以把同样的图标作为资源使用,即 UIKit.Icon.<IconName>:
<PathIcon Data="{StaticResource UIKit.Icon.Search}" />
<PathIcon Classes="large" Data="{StaticResource UIKit.Icon.Bell}" />任何其他几何数据也可以这样使用;主题的 PathIcon 会把拿到的 Data 缩放到对应尺寸。在代码中,IconName.Search.ResourceKey() 返回资源键,即 UIKit.Icon.Search。
应用拥有哪些图标
主题自带组件用到的图标,以及 GPUI Kit 其余组件图标:IconNames.Bundled 中的 109 个图标,可在任何应用中绘制。其他图标由包中的生成器提供:它会把项目用到的图标加入该项目,因此应用只携带自己用到的图标。它会在项目的 XAML 和 C# 中查找:
<uikit:Icon Kind="Bike" />
<PathIcon Data="{StaticResource UIKit.Icon.Bike}" />
<uikit:Icon Kind="{x:Static uikit:IconName.Bike}" />
<Setter Property="Kind" Value="Bike" />icon.Kind = IconName.Bike;
var key = "UIKit.Icon.Bike";它无法识别只在运行时选择的图标:从文件或设置中读取的名称、Enum.Parse<IconName>,或用片段拼接出的键。请在项目文件中列出这些图标,可使用 IconName、Lucide 名称或资源键;也可以选择全部图标,这会让应用增大约 2 MB:
<ItemGroup>
<UIKitIcon Include="Bike;Camera" />
</ItemGroup>
<PropertyGroup>
<UIKitIcons>All</UIKitIcons>
</PropertyGroup>UIKitIcon 中不是图标的名字会产生构建警告(UIKIT001)。应用没有的图标不会绘制任何内容,主题会在 Avalonia 日志中写入一条点名该图标的警告(LogToTrace() 会将其发送到调试输出)。生成器是 C# 源生成器:使用其他语言的项目只有主题自带的图标,即 IconNames.Bundled。
浏览图标
图标 页面会展示每个图标的各种尺寸与主题颜色,并生成绘制它的 XAML;对于由生成器添加的图标,还会给出列出它的 UIKitIcon 项。
对于 IconName 之外的图标,请添加自己的 StreamGeometry 资源,并让 Data 指向它们。