# 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
```