分段控件

SegmentedControl操作与导航

胶囊轨道里的一组选项,当前项下是弹簧滑块,切换时滑到新位置。Tabs 与 Radio 两种语义:Tabs 用于切换视图、筛选,Radio 用于设置取值。选项带图标时,容器窄于 16rem 自动只留图标(文字仍供读屏);icon_only 则固定只显示图标。

预览

属性

名称类型默认值说明
itemsSignal<Vec<SegmentedItem<T>>>必填选项列表;SegmentedItem::new(value, label) 可链式 .icon(..)、.count(..)。
valueSignal<T>必填当前选中的值;没有匹配项时没有当前项。
on_changeCallback<T>必填切换后返回新值(点击与键盘都会触发)。
aria_labelString必填控件组的无障碍名称。
kindSegmentedKindTabs语义:Tabs(tablist / aria-selected)或 Radio(radiogroup / aria-checked)。
sizeSegmentedSizeMd尺寸:Md 或 Sm。
icon_onlyboolfalse只显示图标,文字作为 aria-label 与 title。
classString""外层容器附加类(间距、页面变体)。

键盘

← / →
切换到相邻选项(首尾循环)
Home / End
切换到首个或末个选项
Tab
进入或离开控件组

用法

src/components/ui/segmented.rs
Leptos view!
let mode = RwSignal::new("light".to_string());

view! {
    <SegmentedControl
        items=vec![
            SegmentedItem::new("light".to_string(), "\u6D45\u8272").icon(IconName::Sun),
            SegmentedItem::new("dark".to_string(), "\u6DF1\u8272"),
        ]
        value=mode
        kind=SegmentedKind::Radio
        aria_label="\u5916\u89C2"
        on_change=move |value: String| mode.set(value)
    />
}