# Menu Design Token Menu 使用 `MenuToken`(Token ID: `"Menu"`)作为组件级 Design Token。所有视觉属性均从全局 `SharedToken` 派生,不使用硬编码值。 > 📖 Token 源码位置:`src/AtomUI.Desktop.Controls/Menu/MenuToken.cs` --- ## Token 资源访问方式 ### AXAML 中访问 ```xml {atom:MenuTokenResource ItemColor} {atom:MenuTokenResource ItemHoverBg} {atom:MenuTokenResource MenuPopupBgColor} {atom:SharedTokenResource ColorPrimary} {atom:SharedTokenResource ColorBgElevated} ``` --- ## Token 类定义 ```csharp [ControlDesignToken] internal class MenuToken : AbstractControlDesignToken { public const string ID = "Menu"; public static readonly ControlTokenResourceScopeProvider ScopeProvider = new(ID); // ... } ``` --- ## 完整 Token 属性列表 ### 弹窗相关 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `MenuPopupContentPadding` | `Thickness` | `UniformlyPaddingXXS`, `BorderRadiusLG` | 菜单弹窗内容内间距 | | `MenuPopupMinWidth` | `double` | 固定值 `120` | 菜单弹窗最小宽度 | | `MenuPopupMaxWidth` | `double` | 固定值 `800` | 菜单弹窗最大宽度 | | `MenuPopupBgColor` | `Color` | `ColorBgElevated` | 菜单弹窗背景色 | ### 菜单项基础 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `ItemColor` | `Color` | `ColorText` | 菜单项文字颜色 | | `ItemHoverColor` | `Color` | 同 `ItemColor` | 菜单项悬浮文字颜色 | | `ItemDisabledColor` | `Color` | `ColorTextDisabled` | 菜单项禁用文字颜色 | | `ItemBg` | `Color` | `ColorBgElevated` | 菜单项背景色 | | `ItemHoverBg` | `Color` | `ColorBgTextHover` | 菜单项悬浮背景色 | | `ItemHeight` | `double` | `ControlHeight` | 菜单项高度 | | `ItemBorderRadius` | `CornerRadius` | `BorderRadius` | 菜单项圆角 | | `ItemPaddingInline` | `Thickness` | `UniformlyPadding`, `UniformlyPaddingXXS` | 菜单项横向内间距 | | `ItemMargin` | `Thickness` | `UniformlyMarginXXS` | 菜单项间距(右边距) | ### 图标 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `ItemIconSize` | `double` | `IconSize` | 图标尺寸 | | `ItemIconMarginInlineEnd` | `double` | `ControlHeight - FontSize` | 图标与文字间距 | ### 快捷键 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `KeyGestureColor` | `Color` | `ColorTextQuaternary` | 快捷键提示文字颜色 | ### 危险菜单项 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `DangerItemColor` | `Color` | `ColorError` | 危险菜单项文字颜色 | | `DangerItemHoverColor` | `Color` | `ColorError` | 危险菜单项悬浮文字颜色 | ### 顶层菜单项(TopLevel) | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `TopLevelItemColor` | `Color` | `ColorText` | 顶层菜单项文字颜色 | | `TopLevelItemSelectedColor` | `Color` | `ColorTextSecondary` | 顶层菜单项选中文字颜色 | | `TopLevelItemHoverColor` | `Color` | `ColorTextSecondary` | 顶层菜单项悬浮文字颜色 | | `TopLevelItemBg` | `Color` | `ColorBgContainer` | 顶层菜单项背景色 | | `TopLevelItemSelectedBg` | `Color` | `ColorBgTextHover` | 顶层菜单项选中背景色 | | `TopLevelItemHoverBg` | `Color` | `ColorBgTextHover` | 顶层菜单项悬浮背景色 | ### 顶层菜单项 — 圆角(按尺寸) | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `TopLevelItemBorderRadiusSM` | `CornerRadius` | `BorderRadiusSM` | 小号圆角 | | `TopLevelItemBorderRadius` | `CornerRadius` | `BorderRadius` | 中号圆角 | | `TopLevelItemBorderRadiusLG` | `CornerRadius` | `BorderRadiusLG` | 大号圆角 | ### 顶层菜单项 — 内间距(按尺寸) | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `TopLevelItemPaddingSM` | `Thickness` | `PaddingContentHorizontalXS × 0.7`, `ControlHeightSM` | 小号内间距 | | `TopLevelItemPadding` | `Thickness` | `PaddingContentHorizontalXS`, `ControlHeight` | 中号内间距 | | `TopLevelItemPaddingLG` | `Thickness` | `PaddingContentHorizontalSM`, `ControlHeightLG` | 大号内间距 | ### 顶层菜单项 — 字体(按尺寸) | Token 属性 | 类型 | 默认值 | 说明 | |---|---|---|---| | `TopLevelItemFontSizeSM` | `double` | `SharedToken.FontSize` | 小号字体大小 | | `TopLevelItemFontSize` | `double` | `SharedToken.FontSize` | 中号字体大小 | | `TopLevelItemFontSizeLG` | `double` | `SharedToken.FontSizeLG` | 大号字体大小 | | `TopLevelItemLineHeightSM` | `double` | 自动计算 | 小号行高 | | `TopLevelItemLineHeight` | `double` | 自动计算 | 中号行高 | | `TopLevelItemLineHeightLG` | `double` | 自动计算 | 大号行高 | > 行高计算公式:`CalculatorUtils.CalculateLineHeight(fontSize) × fontSize` ### 顶层弹出菜单 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `TopLevelItemPopupMarginToAnchor` | `double` | `UniformlyMarginXXS` | 顶层弹出菜单距离锚点的间距 | ### 分隔线 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `SeparatorItemHeight` | `double` | `LineWidth × 5` | 分隔线总高度(含上下间距) | ### 上下文菜单偏移 | Token 属性 | 类型 | 派生自 SharedToken | 说明 | |---|---|---|---| | `ContextMenuOffsetX` | `double` | `SpacingXXS` | 上下文菜单水平偏移 | | `ContextMenuOffsetY` | `double` | `SpacingXXS` | 上下文菜单垂直偏移 | ### 其他 | Token 属性 | 类型 | 说明 | |---|---|---| | `MenuTearOffHeight` | `double` | 分离菜单项高度(`ItemHeight × 1.2`,暂未使用) | --- ## Token 在主题中的使用示例 ### MenuItemTheme.axaml 中的 Token 引用 ```xml ``` ### TopLevelMenuItemTheme.axaml 中的 Token 引用 ```xml ``` ### ContextMenuTheme.axaml 中的 Token 引用 ```xml ``` --- ## Token 派生链总结 ``` SharedToken (DesignToken) ├── ColorText → ItemColor, TopLevelItemColor ├── ColorTextSecondary → TopLevelItemSelectedColor, TopLevelItemHoverColor ├── ColorTextQuaternary → KeyGestureColor ├── ColorTextDisabled → ItemDisabledColor ├── ColorError → DangerItemColor, DangerItemHoverColor ├── ColorBgElevated → ItemBg, MenuPopupBgColor ├── ColorBgTextHover → ItemHoverBg, TopLevelItemHoverBg, TopLevelItemSelectedBg ├── ColorBgContainer → TopLevelItemBg ├── ControlHeight → ItemHeight ├── BorderRadius → ItemBorderRadius, TopLevelItemBorderRadius ├── BorderRadiusSM → TopLevelItemBorderRadiusSM ├── BorderRadiusLG → TopLevelItemBorderRadiusLG ├── IconSize → ItemIconSize ├── FontSize → TopLevelItemFontSize, TopLevelItemFontSizeSM ├── FontSizeLG → TopLevelItemFontSizeLG ├── LineWidth → SeparatorItemHeight (× 5) ├── UniformlyPadding → ItemPaddingInline (水平) ├── UniformlyPaddingXXS → ItemPaddingInline (垂直), MenuPopupContentPadding ├── UniformlyMarginXXS → ItemMargin, TopLevelItemPopupMarginToAnchor ├── SpacingXXS → ContextMenuOffsetX, ContextMenuOffsetY ├── PaddingContentHorizontalXS → TopLevelItemPadding, TopLevelItemPaddingSM └── PaddingContentHorizontalSM → TopLevelItemPaddingLG ```