mirror of
https://github.com/AtomUI/AtomUI.git
synced 2026-10-19 06:58:57 +08:00
12 KiB
12 KiB
DropdownButton 使用文档
本文档介绍 AtomUI DropdownButton 控件的各种使用方式,示例代码摘自 Gallery 演示程序。
📖 Gallery 源码位置:
controlgallery/AtomUIGallery/ShowCases/Views/Navigation/DropdownButtonShowCase.axaml
前置准备
在 AXAML 中使用 DropdownButton,需要引入以下命名空间:
xmlns:atom="https://atomui.net"
xmlns:antdicons="https://atomui.net/icons/antdesign"
在 C# 代码中引入:
using AtomUI.Desktop.Controls; // DropdownButton 控件
using AtomUI.Controls; // SizeType 等共享类型
1. 基本用法
最基本的下拉菜单按钮,悬浮触发弹出菜单:
<atom:DropdownButton ButtonType="Link" TriggerType="Hover">
Hover me
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" InputGesture="Ctrl+X"
Icon="{antdicons:AntDesignIconProvider Kind=ScissorOutlined}" />
<atom:MenuItem Header="Copy" InputGesture="Ctrl+C"
Icon="{antdicons:AntDesignIconProvider Kind=CopyOutlined}" />
<atom:MenuItem Header="Delete" InputGesture="Ctrl+D"
Icon="{antdicons:AntDesignIconProvider Kind=DeleteOutlined}" />
<atom:MenuItem Header="Paste">
<atom:MenuItem Header="Paste" InputGesture="Ctrl+P"
Icon="{antdicons:AntDesignIconProvider Kind=FileDoneOutlined}" />
<atom:MenuItem Header="Paste from History" InputGesture="Ctrl+Shift+V" />
</atom:MenuItem>
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
要点:
DropdownFlyout属性接受MenuFlyout,其中包含MenuItem菜单项MenuItem支持Header(文本)、InputGesture(快捷键提示)、Icon(图标)- 支持嵌套子菜单(MenuItem 中嵌套 MenuItem)
2. 按钮类型
DropdownButton 继承 Button 的所有类型,通过 ButtonType 切换外观风格。点击触发弹出:
<StackPanel Orientation="Horizontal" Spacing="10">
<!-- 主按钮 -->
<atom:DropdownButton ButtonType="Primary" TriggerType="Click">
Edit File
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" InputGesture="Ctrl+X"
Icon="{antdicons:AntDesignIconProvider Kind=ScissorOutlined}" />
<atom:MenuItem Header="Copy" InputGesture="Ctrl+C"
Icon="{antdicons:AntDesignIconProvider Kind=CopyOutlined}" />
<atom:MenuItem Header="Delete" InputGesture="Ctrl+D"
Icon="{antdicons:AntDesignIconProvider Kind=DeleteOutlined}" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
<!-- 主按钮 + 胶囊形 -->
<atom:DropdownButton ButtonType="Primary" Shape="Round" TriggerType="Click">
Edit File
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" />
<atom:MenuItem Header="Copy" />
<atom:MenuItem Header="Delete" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
<!-- 默认按钮 -->
<atom:DropdownButton ButtonType="Default" TriggerType="Click">
Edit File
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" />
<atom:MenuItem Header="Copy" />
<atom:MenuItem Header="Delete" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
<!-- 文本按钮 -->
<atom:DropdownButton ButtonType="Text" TriggerType="Click">
Edit File
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" />
<atom:MenuItem Header="Copy" />
<atom:MenuItem Header="Delete" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
</StackPanel>
3. 带箭头指示
通过 IsShowArrow="True" 在弹出菜单上显示指向按钮的箭头。配合不同的 Placement 使用效果最佳:
<atom:DropdownButton ButtonType="Default" TriggerType="Hover"
IsShowArrow="True"
Placement="BottomEdgeAlignedLeft">
BottomLeft
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" InputGesture="Ctrl+X"
Icon="{antdicons:AntDesignIconProvider Kind=ScissorOutlined}" />
<atom:MenuItem Header="Copy" InputGesture="Ctrl+C"
Icon="{antdicons:AntDesignIconProvider Kind=CopyOutlined}" />
<atom:MenuItem Header="Delete" InputGesture="Ctrl+D"
Icon="{antdicons:AntDesignIconProvider Kind=DeleteOutlined}" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
<!-- 箭头 + 不同弹出位置 -->
<atom:DropdownButton ButtonType="Default" TriggerType="Hover"
IsShowArrow="True" Placement="Bottom">
Bottom
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<atom:DropdownButton ButtonType="Default" TriggerType="Hover"
IsShowArrow="True" Placement="TopEdgeAlignedLeft">
TopLeft
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
可以使用 IsPointAtCenter="True" 让箭头指向按钮中心:
<atom:DropdownButton IsShowArrow="True" IsPointAtCenter="True"
TriggerType="Hover" Placement="Bottom">
Centered Arrow
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
4. 弹出位置
支持 6 种弹出位置,通过 Placement 属性设置:
<!-- 底部左对齐(默认) -->
<atom:DropdownButton Placement="BottomEdgeAlignedLeft" TriggerType="Hover">
BottomLeft
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<!-- 底部居中 -->
<atom:DropdownButton Placement="Bottom" TriggerType="Hover">
Bottom
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<!-- 底部右对齐 -->
<atom:DropdownButton Placement="BottomEdgeAlignedRight" TriggerType="Hover">
BottomRight
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<!-- 顶部左对齐 -->
<atom:DropdownButton Placement="TopEdgeAlignedLeft" TriggerType="Hover">
TopLeft
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<!-- 顶部居中 -->
<atom:DropdownButton Placement="Top" TriggerType="Hover">
Top
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<!-- 顶部右对齐 -->
<atom:DropdownButton Placement="TopEdgeAlignedRight" TriggerType="Hover">
TopRight
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
5. 菜单项点击事件
通过 MenuItemClicked 事件统一监听弹出菜单中所有菜单项的点击:
<atom:DropdownButton MenuItemClicked="HandleMenuItemClicked">
Actions
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Edit" />
<atom:MenuItem Header="Delete" />
<atom:MenuItem Header="Export" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
private void HandleMenuItemClicked(object? sender, FlyoutMenuItemClickedEventArgs args)
{
var menuItem = args.Item;
// 获取被点击的菜单项,处理相应业务逻辑
var header = menuItem.Header?.ToString();
Debug.WriteLine($"Clicked: {header}");
}
6. 自定义下拉指示器
隐藏下拉指示器
<atom:DropdownButton IsShowOpenIndicator="False" TriggerType="Hover">
No Arrow Icon
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
自定义指示器图标
<atom:DropdownButton OpenIndicator="{antdicons:AntDesignIconProvider Kind=MoreOutlined}"
TriggerType="Click">
Custom Icon
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<atom:DropdownButton OpenIndicator="{antdicons:AntDesignIconProvider Kind=EllipsisOutlined}"
TriggerType="Click">
Ellipsis
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
7. 继承自 Button 的能力
DropdownButton 继承 Button 的全部属性,以下展示一些常用组合:
危险样式
<atom:DropdownButton ButtonType="Primary" IsDanger="True" TriggerType="Click">
Danger Actions
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Delete All" />
<atom:MenuItem Header="Reset" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
不同尺寸
<atom:DropdownButton SizeType="Large" TriggerType="Click">
Large
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<atom:DropdownButton SizeType="Middle" TriggerType="Click">
Default
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
<atom:DropdownButton SizeType="Small" TriggerType="Click">
Small
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
带图标
<atom:DropdownButton ButtonType="Primary" TriggerType="Click"
Icon="{antdicons:AntDesignIconProvider Kind=SettingOutlined}">
Settings
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
禁用状态
<atom:DropdownButton IsEnabled="False">
Disabled
<!-- ... DropdownFlyout ... -->
</atom:DropdownButton>
常见组合模式
操作更多菜单
主操作使用独立按钮,更多操作使用 DropdownButton:
<StackPanel Orientation="Horizontal" Spacing="8">
<atom:Button ButtonType="Primary">Submit</atom:Button>
<atom:DropdownButton TriggerType="Click">
More
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Save as Draft" />
<atom:MenuItem Header="Export" />
<atom:MenuItem Header="Print" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
</StackPanel>
文件操作工具栏
<StackPanel Orientation="Horizontal" Spacing="8">
<atom:DropdownButton ButtonType="Primary" TriggerType="Click"
Icon="{antdicons:AntDesignIconProvider Kind=FileOutlined}">
File
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="New" InputGesture="Ctrl+N" />
<atom:MenuItem Header="Open" InputGesture="Ctrl+O" />
<atom:MenuItem Header="Save" InputGesture="Ctrl+S" />
<atom:MenuItem Header="Save As" InputGesture="Ctrl+Shift+S" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
<atom:DropdownButton ButtonType="Default" TriggerType="Click"
Icon="{antdicons:AntDesignIconProvider Kind=EditOutlined}">
Edit
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Cut" InputGesture="Ctrl+X"
Icon="{antdicons:AntDesignIconProvider Kind=ScissorOutlined}" />
<atom:MenuItem Header="Copy" InputGesture="Ctrl+C"
Icon="{antdicons:AntDesignIconProvider Kind=CopyOutlined}" />
<atom:MenuItem Header="Paste" InputGesture="Ctrl+V" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>
</StackPanel>
悬浮触发 + 自定义延迟
<atom:DropdownButton TriggerType="Hover"
MouseEnterDelay="300"
MouseLeaveDelay="200">
Slow Hover
<atom:DropdownButton.DropdownFlyout>
<atom:MenuFlyout>
<atom:MenuItem Header="Option A" />
<atom:MenuItem Header="Option B" />
</atom:MenuFlyout>
</atom:DropdownButton.DropdownFlyout>
</atom:DropdownButton>