Files

156 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Notification Design Token
Notification 控件使用 `NotificationToken`(Token ID: `"Notification"`)作为组件级 Design Token,所有视觉属性均从全局 `SharedToken` 派生,不硬编码任何具体值。
---
## Token 资源访问方式
在 AXAML 中使用组件级 Token:
```xml
{atom:NotificationTokenResource NotificationBg}
{atom:NotificationTokenResource NotificationPadding}
{atom:NotificationTokenResource NotificationWidth}
```
在 AXAML 中使用全局共享 Token:
```xml
{atom:SharedTokenResource ColorPrimary}
{atom:SharedTokenResource ColorSuccess}
{atom:SharedTokenResource BorderRadiusLG}
```
---
## 组件级 Token 一览
以下是 `NotificationToken` 定义的全部组件级 Token,按功能分组说明。
### 背景与颜色 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `NotificationBg` | `Color` | `SharedToken.ColorBgElevated` | 通知卡片背景色 |
| `NotificationProgressBg` | `IImmutableBrush?` | 线性渐变(`ColorPrimaryHover` → `ColorPrimary`) | 进度条渐变背景色 |
### 尺寸 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `NotificationWidth` | `double` | 固定值 `384` | 通知卡片宽度 |
| `NotificationIconSize` | `double` | `SharedToken.FontSizeLG * SharedToken.RelativeLineHeightLG` | 类型图标尺寸 |
| `NotificationCloseButtonSize` | `double` | `SharedToken.ControlHeightLG * 0.55` | 关闭按钮尺寸 |
| `NotificationProgressHeight` | `double` | 固定值 `2` | 进度条高度 |
### 间距 Token
| Token 名 | 类型 | 来源 | 说明 |
|---|---|---|---|
| `NotificationPadding` | `Thickness` | `SharedToken.UniformlyPaddingLG` (左右), `SharedToken.UniformlyPaddingMD` (上), `0` (下) | 通知卡片内间距 |
| `NotificationIconMargin` | `Thickness` | `0, 0, SharedToken.UniformlyMarginSM, 0` | 类型图标右外边距 |
| `NotificationCloseButtonPadding` | `Thickness` | `SharedToken.PaddingXXS` | 关闭按钮内间距 |
| `NotificationMarginBottom` | `Thickness` | `0, 0, 0, SharedToken.UniformlyMargin` | 通知卡片之间的底部间距 |
| `NotificationTopMargin` | `Thickness` | `SharedToken.UniformlyMarginLG` (左、上、右), `0` (下) | 顶部位置时的卡片外边距 |
| `NotificationBottomMargin` | `Thickness` | `SharedToken.UniformlyMarginLG` (左、右、下), `0` (上) | 底部位置时的卡片外边距 |
| `NotificationProgressMargin` | `Thickness` | `0, 0, 0, 1` | 进度条外边距 |
| `NotificationContentMargin` | `Thickness` | `0, 0, 0, SharedToken.UniformlyPaddingMD` | 正文内容区域外边距 |
| `HeaderMargin` | `Thickness` | `0, 0, 0, SharedToken.UniformlyMarginXS` | 标题栏底部外边距 |
---
## 主题中使用的全局 SharedToken
除组件级 Token 外,Notification 的 ControlTheme 还直接引用了以下全局 `SharedToken`:
| Token 资源键 | 使用场景 |
|---|---|
| `EnableMotion` | 全局动画开关,控制 `IsMotionEnabled` 默认值 |
| `MotionDurationMid` | 出入动画时长 |
| `BoxShadows` | 通知卡片的阴影效果 |
| `BorderRadiusLG` | 通知卡片圆角半径 |
| `BorderRadiusSM` | 关闭按钮圆角半径 |
| `ColorPrimary` | Information 类型图标颜色 |
| `ColorSuccess` | Success 类型图标颜色 |
| `ColorWarning` | Warning 类型图标颜色 |
| `ColorError` | Error 类型图标颜色 |
| `ColorTextHeading` | 标题文本颜色 |
| `ColorText` | 正文文本颜色 |
| `FontSize` | 正文字体大小 |
| `FontSizeLG` | 标题字体大小 |
| `FontHeight` | 正文行高 |
| `FontHeightLG` | 标题行高 |
| `IconSizeSM` | 关闭按钮图标尺寸 |
---
## Token 对外观的具体影响
### 通知卡片布局
通知卡片的整体布局由以下 Token 控制:
| 区域 | Token | 说明 |
|---|---|---|
| 卡片宽度 | `NotificationWidth` | 固定 384px(与 Ant Design 对齐) |
| 卡片背景 | `NotificationBg` | 从 `ColorBgElevated` 派生,支持明暗主题切换 |
| 卡片圆角 | `BorderRadiusLG`(SharedToken) | 大圆角样式 |
| 卡片阴影 | `BoxShadows`(SharedToken) | 浮层阴影效果 |
| 卡片内间距 | `NotificationPadding` | 上:PaddingMD,左右:PaddingLG,下:0 |
### 图标区域
| 区域 | Token | 说明 |
|---|---|---|
| 图标尺寸 | `NotificationIconSize` | 基于 `FontSizeLG * RelativeLineHeightLG` 计算 |
| 图标间距 | `NotificationIconMargin` | 图标右侧留出 `UniformlyMarginSM` 间距 |
| 图标颜色 | `ColorPrimary` / `ColorSuccess` / `ColorWarning` / `ColorError` | 根据 `NotificationType` 选择 |
### 标题区域
| 区域 | Token | 说明 |
|---|---|---|
| 标题字号 | `FontSizeLG`(SharedToken) | 大号字体 |
| 标题行高 | `FontHeightLG`(SharedToken) | 大号行高 |
| 标题颜色 | `ColorTextHeading`(SharedToken) | 标题专用色 |
| 标题间距 | `HeaderMargin` | 标题栏底部留出 `UniformlyMarginXS` 间距 |
### 关闭按钮
| 区域 | Token | 说明 |
|---|---|---|
| 按钮圆角 | `BorderRadiusSM`(SharedToken) | 小圆角 |
| 按钮内间距 | `NotificationCloseButtonPadding` | 基于 `PaddingXXS` |
| 图标尺寸 | `IconSizeSM`(SharedToken) | 小号图标 |
### 正文区域
| 区域 | Token | 说明 |
|---|---|---|
| 正文字号 | `FontSize`(SharedToken) | 标准字体大小 |
| 正文行高 | `FontHeight`(SharedToken) | 标准行高 |
| 正文颜色 | `ColorText`(SharedToken) | 标准文本色 |
| 正文间距 | `NotificationContentMargin` | 正文底部留出 `UniformlyPaddingMD` 间距 |
### 进度条
| 区域 | Token | 说明 |
|---|---|---|
| 进度条高度 | `NotificationProgressHeight` | 固定 2px |
| 进度条颜色 | `NotificationProgressBg` | 线性渐变(`ColorPrimaryHover` → `ColorPrimary`) |
| 进度条间距 | `NotificationProgressMargin` | 底部 1px 间距 |
### 位置相关边距
| 位置 | Token | 说明 |
|---|---|---|
| Top 系列(TopLeft / TopRight / TopCenter) | `NotificationTopMargin` | 左、上、右边距为 `UniformlyMarginLG`,下为 0 |
| Bottom 系列(BottomLeft / BottomRight / BottomCenter) | `NotificationBottomMargin` | 左、右、下边距为 `UniformlyMarginLG`,上为 0 |
---
## 暗黑模式支持
`NotificationToken.CalculateTokenValues(bool isDarkMode)` 会在暗黑模式下根据 `SharedToken` 的变化自动重新计算所有 Token 值。由于所有颜色和尺寸均从 `SharedToken` 派生,切换主题时通知的背景色(`ColorBgElevated`)、文本色(`ColorText` / `ColorTextHeading`)、图标色(`ColorPrimary` 等)会自动适配暗黑模式,无需额外配置。