# Segmented 使用文档 本文档介绍 AtomUI Segmented 控件的各种使用方式,示例代码摘自 Gallery 演示程序。 > 📖 Gallery 源码位置:`controlgallery/AtomUIGallery/ShowCases/Views/DataDisplay/SegmentedShowCase.axaml` --- ## 前置准备 在 AXAML 中使用 Segmented,需要引入以下命名空间: ```xml xmlns:atom="https://atomui.net" xmlns:antdicons="https://atomui.net/icons/antdesign" ``` 在 C# 代码中引入: ```csharp using AtomUI.Desktop.Controls; // Segmented, SegmentedItem using AtomUI.Controls; // SizeType 等共享类型 ``` --- ## 1. 基本用法 最基本的 Segmented 用法——在几个文本选项之间切换: ```xml Daily Weekly Monthly Quarterly Yearly ``` **默认行为**:首次渲染时自动选中第一个选项(`SelectedIndex = 0`),点击其他选项时色块平滑滑动到新位置。 --- ## 2. Block 模式 通过 `IsExpanding="True"` 让 Segmented 撑满父容器,所有选项均分宽度: ```xml 123 456 longtext-longtext-longtext-longtext ``` **使用场景**:当 Segmented 作为内容区域的主切换器,需要与容器等宽排列时使用。 --- ## 3. 三种尺寸 通过 `SizeType` 属性设置尺寸,支持 `Large`、`Middle`(默认)、`Small` 三种。 ```xml Daily Weekly Monthly Quarterly Yearly Daily Weekly Monthly Quarterly Yearly Daily Weekly Monthly Quarterly Yearly ``` --- ## 4. 纯图标选项 每个选项仅显示图标(不设 Content): ```xml ``` **使用场景**:视图模式切换(列表视图/网格视图)等图标本身语义明确的场景。 --- ## 5. 图标 + 文字选项 同时设置 `Icon` 和 `Content`,图标显示在文字左侧: ```xml List ``` 图标 + 文字可与尺寸组合使用: ```xml Ava 牛逼 ``` --- ## 6. 禁用选项 ### 全部禁用 ```xml Map Transit Satellite ``` ### 部分禁用 ```xml Daily Weekly Monthly Quarterly Yearly ``` **说明**:禁用的选项文字变为灰色(`ColorTextDisabled`),不响应点击操作,也不会显示悬浮态背景色。 --- ## 7. 选中项监听 ### 通过事件 ```xml Option A Option B Option C ``` ```csharp private void OnSegmentedSelectionChanged(object? sender, SelectionChangedEventArgs e) { if (sender is Segmented segmented) { var selectedIndex = segmented.SelectedIndex; var selectedItem = segmented.SelectedItem; // 处理选中变化... } } ``` ### 通过数据绑定 ```xml Daily Weekly Monthly ``` ```csharp public class MyViewModel : ReactiveObject { private int _selectedSegmentIndex; public int SelectedSegmentIndex { get => _selectedSegmentIndex; set => this.RaiseAndSetIfChanged(ref _selectedSegmentIndex, value); } } ``` --- ## 8. 数据绑定(ItemsSource) 可以使用 `ItemsSource` 绑定数据集合,配合 `ItemTemplate` 定义选项外观: ```xml ``` ```csharp public class MyViewModel : ReactiveObject { public ObservableCollection TimeRanges { get; } = new() { "Daily", "Weekly", "Monthly", "Quarterly", "Yearly" }; private string? _selectedTimeRange; public string? SelectedTimeRange { get => _selectedTimeRange; set => this.RaiseAndSetIfChanged(ref _selectedTimeRange, value); } } ``` --- ## 9. 控制动画行为 ```xml A B C ``` --- ## 常见组合模式 ### 视图模式切换 ```xml List Grid ``` ### 时间范围选择器 ```xml Day Week Month Year ``` ### 撑满宽度的导航 ```xml Overview Details Settings ``` ### 带禁用和图标的混合使用 ```xml Ava 牛逼 ```