Files
AtomUI/docs/Controls.Shared/MediaQuery/Overview.md
T

49 lines
2.5 KiB
Markdown
Raw 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.
# AtomUI 媒体查询(Media Query)系统
> 本文档描述 AtomUI 响应式布局的核心架构 —— 媒体查询系统(Media Query System)的设计原理、实现机制及开发者使用指南。
---
## 文档索引
| 文档 | 内容 |
|---|---|
| [架构设计](./Architecture.md) | 系统总体架构、断点检测机制、数据流与核心类型说明 |
| [开发者指南](./DeveloperGuide.md) | 面向控件开发者的使用指南,包含响应式 Grid、Form、Descriptions 等完整示例 |
---
## 概述
AtomUI 的媒体查询系统是一套 **基于容器宽度的响应式断点机制**,完整复现了 [Ant Design 5.0 栅格系统](https://ant.design/components/grid-cn) 的六级响应式断点策略。它构建在 Avalonia 的 [Container Query](https://docs.avaloniaui.net/docs/styling/container-queries) 机制之上,为 AtomUI 控件提供统一的窗口级响应式能力。
### 设计目标
1. **对齐 Ant Design 5.0**:完整实现 `xs / sm / md / lg / xl / xxl` 六级断点体系,断点阈值与 Ant Design 完全一致。
2. **基于容器查询**:利用 Avalonia 原生的 `ContainerQuery` + `Container.Sizing` 机制实现宽度检测,而非自行监听窗口尺寸变化。
3. **统一事件分发**:通过 `Window` 集中管理断点状态,下游控件通过 `IMediaBreakAwareControl` 接口订阅断点变更事件。
4. **声明式 AXAML 友好**:所有响应式数据类型(`GridColSpanInfo`、`GridGutterInfo`、`MediaBreakGridLength`、`DescriptionsMediaBreakInfo`)均提供 `TypeConverter`,支持在 AXAML 中以字符串格式直接配置。
### 断点阈值
| 断点名称 | 缩写 | 最小宽度 (px) | 典型设备 |
|---|---|---|---|
| ExtraSmall | `xs` | 0 | 手机竖屏 |
| Small | `sm` | 576 | 手机横屏 |
| Medium | `md` | 768 | 平板竖屏 |
| Large | `lg` | 992 | 平板横屏 / 小桌面 |
| ExtraLarge | `xl` | 1200 | 标准桌面 |
| ExtraExtraLarge | `xxl` | 1600 | 大屏桌面 |
这些阈值定义在 `MediaBreakPoint` 枚举中,枚举的整数值即为该断点的最小像素宽度。
### 与 CSS 媒体查询的关系
| 概念 | CSS | AtomUI |
|---|---|---|
| 检测目标 | 视口(viewport) | Window 内容区域(ContentFrame) |
| 检测机制 | `@media (min-width: ...)` | Avalonia `ContainerQuery` + `Container.Sizing` |
| 断点传播 | CSS 变量 / JS 事件 | `IMediaBreakAwareControl.MediaBreakPointChanged` 事件 |
| 响应式属性 | CSS `grid-template-columns` 等 | `GridColSpanInfo`、`GridGutterInfo`、`MediaBreakGridLength` 等 C# record 类型 |