mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-19 23:30:44 +08:00
6.6 KiB
6.6 KiB
SplitButton API 参考
命名空间
namespace AtomUI.Desktop.Controls;
AXAML 命名空间前缀:atom(xmlns:atom="https://atomui.net")
枚举类型
SizeType(来自 AtomUI.Controls)
尺寸类型枚举。
| 值 | 说明 |
|---|---|
Small |
小号 |
Middle |
中号(默认) |
Large |
大号 |
FlyoutTriggerType(来自 AtomUI.Controls)
弹出菜单触发方式枚举。
| 值 | 说明 |
|---|---|
Click |
点击触发(默认) |
Hover |
鼠标悬浮触发 |
PlacementMode(来自 Avalonia.Controls.Primitives.PopupPositioning)
弹出层位置模式枚举。SplitButton 默认使用 BottomEdgeAlignedRight。
| 常用值 | 说明 |
|---|---|
Bottom |
下方居中 |
BottomEdgeAlignedLeft |
下方左对齐 |
BottomEdgeAlignedRight |
下方右对齐(SplitButton 默认值) |
Top |
上方居中 |
TopEdgeAlignedLeft |
上方左对齐 |
TopEdgeAlignedRight |
上方右对齐 |
公共属性(StyledProperty)
SplitButton 自身属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Flyout |
Flyout? |
null |
下拉菜单弹出层(支持 MenuFlyout),由右侧按钮触发 |
TriggerType |
FlyoutTriggerType |
Click |
Flyout 触发方式(Click / Hover) |
IsShowArrow |
bool |
false |
弹出菜单是否显示指示箭头 |
IsPointAtCenter |
bool |
false |
箭头是否指向触发元素中心 |
Placement |
PlacementMode |
BottomEdgeAlignedRight |
Flyout 弹出位置 |
PlacementAnchor |
PopupAnchor |
默认值 | Flyout 弹出锚点 |
PlacementGravity |
PopupGravity |
默认值 | Flyout 弹出重力方向 |
GutterToFlyout |
double |
由 Token 控制 | 弹出层与按钮之间的间距 |
MouseEnterDelay |
int |
默认值 | 悬浮触发延迟(毫秒),仅 TriggerType=Hover 时生效 |
MouseLeaveDelay |
int |
默认值 | 离开关闭延迟(毫秒),仅 TriggerType=Hover 时生效 |
IsPrimaryButtonType |
bool |
false |
是否使用 Primary 按钮样式(蓝色背景),false 时使用 Default 样式(白色背景 + 边框) |
IsDanger |
bool |
false |
危险按钮样式,启用后两个内部按钮使用红色系 |
Icon |
PathIcon? |
null |
主按钮图标,使用 Ant Design 图标集 |
OpenIndicator |
PathIcon? |
EllipsisOutlined |
下拉按钮图标,默认为省略号图标 |
SizeType |
SizeType |
SizeType.Middle |
按钮尺寸(共享属性,通过 AddOwner 注册) |
IsMotionEnabled |
bool |
跟随全局 Token | 是否启用过渡动画(共享属性) |
IsWaveSpiritEnabled |
bool |
跟随全局 Token | 是否启用点击波纹效果(共享属性) |
ICommandSource 接口属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Command |
ICommand? |
null |
主按钮点击命令,CanExecute 为 false 时自动禁用整个 SplitButton |
CommandParameter |
object? |
null |
命令参数 |
HotKey |
KeyGesture? |
null |
键盘快捷键,触发主按钮点击 |
继承自 Avalonia.Controls.ContentControl 的常用属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
Content |
object? |
null |
主按钮文本内容 |
ContentTemplate |
IDataTemplate? |
null |
内容模板 |
HorizontalAlignment |
HorizontalAlignment |
Left |
水平对齐 |
VerticalAlignment |
VerticalAlignment |
Top |
垂直对齐 |
IsEnabled |
bool |
true |
是否启用(同时受 Command.CanExecute 控制) |
Foreground |
IBrush? |
由主题控制 | 前景色 |
Background |
IBrush? |
由主题控制 | 背景色 |
BorderBrush |
IBrush? |
由 Token 控制 | 边框颜色(SharedToken.ColorBorder) |
BorderThickness |
Thickness |
由 Token 控制 | 边框粗细(SharedToken.BorderThickness) |
CornerRadius |
CornerRadius |
由 Token 控制 | 圆角半径(根据 SizeType 自动设置) |
事件
| 事件名 | 类型 | 说明 |
|---|---|---|
Click |
EventHandler<RoutedEventArgs> |
主按钮(左侧)被点击时触发,路由策略为 Bubble |
重要提示:
Click事件仅在点击左侧主按钮时触发。点击右侧下拉按钮会打开 Flyout,不会触发Click事件。内部主按钮的Click事件会被标记为Handled,防止冒泡到外部。
伪类(Pseudo-Classes)
SplitButton 支持以下伪类,可在样式选择器中使用:
| 伪类 | 触发条件 |
|---|---|
:flyout-open |
Flyout 处于打开状态 |
:pressed |
主按钮被按下(键盘 Space/Enter 触发) |
:checked |
选中状态(用于 ToggleSplitButton 派生类) |
:disabled |
IsEnabled == false 或 Command.CanExecute == false |
:pointerover |
鼠标悬浮在控件上 |
:focus |
获得焦点 |
:focus-visible |
通过键盘(Tab 键)获得焦点 |
实现的接口
ICommandSource
public ICommand? Command { get; set; }
public object? CommandParameter { get; set; }
支持 MVVM 命令绑定。当 Command.CanExecute 返回 false 时,SplitButton 自动禁用(灰色调 + 不可点击)。
ISizeTypeAware
public SizeType SizeType { get; set; }
支持 Large / Middle / Small 三种尺寸,两个内部 Button 同步尺寸。
IWaveSpiritAwareControl
public bool IsWaveSpiritEnabled { get; set; }
控制内部 Button 的点击波纹效果开关。
ICompactSpaceAware
在 Space.Compact 容器中使用时自动调整圆角。SplitButton 提供以下行为:
- 根据在紧凑空间中的位置自动裁剪外部圆角
- 将裁剪后的圆角重新分配给左右两个内部 Button
- 返回边框厚度供容器计算相邻控件间距
键盘交互
| 按键 | 行为 |
|---|---|
Space / Enter |
触发主按钮点击(Click 事件 + Command 执行) |
Alt+Down |
打开 Flyout(需非 XY 导航模式) |
F4 |
打开 Flyout |
Escape |
关闭 Flyout(当 Flyout 无可聚焦内容时) |
内部属性(Internal)
以下属性为内部使用,不作为公共 API:
| 属性名 | 类型 | 说明 |
|---|---|---|
SplitSeparatorBrush |
IBrush? |
Primary 模式下分隔线画刷 |
EffectiveButtonType |
ButtonType |
内部 Button 的实际类型(由 IsPrimaryButtonType 驱动) |
CompactSpaceItemPosition |
SpaceItemPosition? |
紧凑空间中的位置 |
CompactSpaceOrientation |
Orientation |
紧凑空间方向 |
IsUsedInCompactSpace |
bool |
是否处于紧凑空间中 |