# Grid 自定义样式指南 Grid 栅格系统(`Row` / `Col`)是纯布局控件,自身不渲染任何可见样式。因此自定义样式主要有两个层面: 1. **调整布局行为** — 通过 `Row` / `Col` 的属性控制间距、对齐、栅格分配 2. **调整子元素样式** — 通过 Avalonia `Style` 控制放置在 `Col` 内的子控件外观 --- ## 1. 通过属性直接控制布局 `Row` 和 `Col` 的布局行为完全由属性控制,不需要覆盖 ControlTheme。 ### Row 布局属性 ```xml ``` ### Col 布局属性 ```xml ``` ### 响应式布局属性 ```xml ``` --- ## 2. 通过 Style 设置批量属性 虽然 `Row` 和 `Col` 不使用 ControlTheme,但可以通过 Avalonia 的 `Style` 系统批量设置属性默认值。 ### 为所有 Row 设置默认间距 ```xml ``` ### 为特定容器内的 Row 设置对齐方式 ```xml ``` ### 为 Col 设置默认属性 ```xml ``` --- ## 3. 为栅格子元素定义样式 Gallery 中使用的样式模式:在容器级别定义子元素样式类,然后在 `Col` 的子元素上应用。 > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/Layout/GridShowCase.axaml` ### 典型网格演示样式 ```xml col-6 col-6 ``` --- ## 4. 卡片网格布局 一个常见的实际应用场景——使用栅格创建卡片网格: ```xml ``` --- ## 样式选择器速查 | 选择器 | 说明 | |---|---| | `atom\|Row` | 匹配所有 Row | | `atom\|Col` | 匹配所有 Col | | `atom\|Row > atom\|Col` | 匹配 Row 直接子元素 Col | | `StackPanel.form-layout atom\|Row` | 匹配特定容器内的 Row | | `atom\|Col > Border` | 匹配 Col 直接子元素 Border | --- ## 注意事项 1. **Grid 没有 ControlTheme** — `Row` 继承自 `Panel`,`Col` 继承自 `ContentControl`,它们不定义独立的 ControlTheme。无法通过 `ControlTheme` 覆盖来改变栅格布局行为。 2. **间距由 Gutter 实现** — 不要通过 `Style` 设置 `Col` 的 `Margin` 或 `Padding` 来模拟间距,这会与 Gutter 计算冲突。 3. **背景色在子元素上设置** — `Row` 和 `Col` 自身不应设置背景色(除非有特殊需求)。应该在放置在 `Col` 内的 `Border` 或其他容器上设置视觉样式。 4. **响应式配置优先级** — `Xs` / `Sm` / `Md` / `Lg` / `Xl` / `Xxl` 属性会覆盖 `Span` / `Offset` / `Order` / `Push` / `Pull` 的基础值。断点属性中未指定的字段回退到基础值。