# SplitButton 自定义样式指南 SplitButton 的视觉表现通过 `ControlTheme` + Design Token 系统控制。由于 SplitButton 内部包含两个完整的 AtomUI `Button` 实例,大部分视觉效果由内部 Button 的 Theme 驱动。以下介绍几种常见的自定义方式。 --- ## 1. 使用属性直接控制 最简单的方式是通过 SplitButton 的公共属性来控制外观: ```xml Default Split Primary Split Large Middle Small Danger Default Danger Primary Options Custom Icon Download ``` > 📖 完整示例参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml` --- ## 2. 通过 Style 覆盖样式 可以在 AXAML 中使用 `Style` 对 SplitButton 进行全局或局部样式覆盖: ### 全局统一间距和对齐 ```xml ``` ### 统一尺寸 ```xml ``` ### 调整悬浮延迟 ```xml ``` ### 按伪类定制样式 ```xml ``` --- ## 3. 访问内部 Button 模板部件 SplitButton 内部包含两个 AtomUI `Button`,可通过模板选择器 (`/template/`) 访问它们以定制更细粒度的样式: ### 定制内部按钮悬浮样式 ```xml ``` ### 访问主按钮和下拉按钮 ```xml ``` --- ## 4. 尺寸与按钮类型组合 SplitButton 支持三种尺寸 × 两种按钮类型的组合: ```xml Large Default Middle Default Small Default Large Primary Middle Primary Small Primary ``` > 📖 参考:`controlgallery/AtomUIGallery/ShowCases/Views/General/SplitButtonShowCase.axaml` 中 "Size" 示例。 --- ## 5. 控制动画行为 ```xml 无动画 无波纹 ``` --- ## 6. 通过 ControlTheme 完全替换主题 如果需要彻底替换 SplitButton 的模板和样式,可以定义自定义 `ControlTheme`: ```xml 自定义 ``` > ⚠️ 注意:完全替换 ControlTheme 时,必须保留 `PART_PrimaryButton` 和 `PART_SecondaryButton` 这两个模板部件名称,否则 SplitButton 内部的点击事件、Flyout 管理和圆角分配等逻辑将失效。 --- ## 样式选择器速查 > 说明:Avalonia 样式选择器中使用 `atom|SplitButton` 语法引用 `atom` XML 命名空间下的 `SplitButton` 类型,其中 `|` 是命名空间分隔符。 ### 按类型和属性选择 | 选择器 | 说明 | |---|---| | `atom\|SplitButton` | 匹配所有 SplitButton 实例,用于设置全局通用样式 | | `atom\|SplitButton[IsPrimaryButtonType=True]` | 匹配 Primary 样式的 SplitButton(蓝色背景) | | `atom\|SplitButton[IsDanger=True]` | 匹配危险样式的 SplitButton(红色系) | ### 按尺寸选择 | 选择器 | 说明 | |---|---| | `atom\|SplitButton[SizeType=Large]` | 匹配大号 SplitButton | | `atom\|SplitButton[SizeType=Middle]` | 匹配中号 SplitButton(默认) | | `atom\|SplitButton[SizeType=Small]` | 匹配小号 SplitButton | ### 按伪类选择 | 选择器 | 说明 | |---|---| | `atom\|SplitButton:flyout-open` | 匹配 Flyout 打开状态,可用于定制弹出时的视觉反馈 | | `atom\|SplitButton:pressed` | 匹配主按钮按下状态(键盘触发),可用于定制按压视觉 | | `atom\|SplitButton:checked` | 匹配选中状态(仅 `ToggleSplitButton` 派生类) | | `atom\|SplitButton:disabled` | 匹配禁用状态 | | `atom\|SplitButton:pointerover` | 匹配鼠标悬浮状态 | | `atom\|SplitButton:focus-visible` | 匹配通过键盘获得焦点的状态 | ### 访问内部模板部件 | 选择器 | 说明 | |---|---| | `atom\|SplitButton /template/ DockPanel#PART_MainLayout` | 访问根布局 DockPanel | | `atom\|SplitButton /template/ atom\|Button#PART_PrimaryButton` | 访问左侧主按钮 | | `atom\|SplitButton /template/ atom\|Button#PART_SecondaryButton` | 访问右侧下拉按钮 | | `atom\|SplitButton /template/ #PART_MainLayout > atom\|Button` | 匹配所有内部 Button | | `atom\|SplitButton /template/ #PART_MainLayout > atom\|Button:pointerover` | 匹配悬浮状态的内部 Button | ### 组合选择器示例 | 选择器 | 说明 | |---|---| | `atom\|SplitButton[IsPrimaryButtonType=True]:not(:disabled)` | 非禁用状态的 Primary SplitButton | | `atom\|SplitButton[IsDanger=True]:flyout-open` | 危险 SplitButton 在 Flyout 打开时 | | `atom\|SplitButton[SizeType=Large][IsPrimaryButtonType=True]` | 大号 Primary SplitButton |