Select 下拉选择

FluereSelect 是不可编辑的下拉选择器:触发面只显示当前项文本(或占位符),点击展开面板、点选或键盘选一项。视觉还原 WinUI 3(Windows App SDK)的 ComboBox 非编辑形态,交互底座复用 reka-ui 的 Select。

与 Combobox 的差异

两者长得像,但职责不同——选错会把「可输入 + 可搜索」的能力白送出去:

维度FluereSelectFluereCombobox
触发面只有文本 + 箭头,不可输入可选可编辑输入框(editable)
文本搜索无(仅有底座按字符跳转)有(textSearchEnabled)
事件change(单项)selectionChanged(added / removed)
适用场景取值固定的枚举项需要输入过滤 / 自由文本的场景

基础用法

v-model 绑定选中值;未选中时显示 placeholder。选项用 items 传(value / text / disabled)。

刷新频率

当前:week

基础用法

受控与清空

modelValue 是唯一事实源;把它设为 null 即可回到占位符。每次选中都会抛 change。

外观主题
最近一次 change:未选择
受控 + change + 清空

状态与空列表

header / description 与触发面按 id 关联;禁用项键盘会跳过;整组 disabled 时不展开;items 为空时用 #empty 给空态文案。

同步速度含一个不可选项,键盘会跳过它。
整组禁用
空列表
标题 / 说明 / 禁用 / 空列表

规格来源

项值
控件WinUI 3 ComboBox(非编辑形态;WinUI 没有名为 Select 的控件)
tag/commitwinui3/release/2.5.1 / ba3a8d5
关键文件src/controls/dev/ComboBox/ComboBox_themeresources.xaml

实现要点

  • 触发面:ComboBoxBackground* ← ControlFillColor* → --colorNeutralBackground1 / …Hover / …Pressed / …Disabled;四边 ControlElevationBorderBrush → --colorNeutralStrokeAlpha、底边 ControlStrokeColorDefault → --colorNeutralStroke1(与本库 FluereCombobox 非编辑形态同一套口径,避免同页两种下拉视觉漂移)。
  • 下拉项:ComboBoxItemBackground* ← SubtleFillColor* → --colorSubtleBackground / …Hover / …Pressed / …Selected;选中项左侧 3px 指示条用 --colorCompoundBrandBackground。
  • 下拉面:圆角 --borderRadiusXLarge(OverlayCornerRadius)、描边 --colorNeutralStroke1、--shadow16(elevation 16)、底色 --colorNeutralBackground1。
  • 层级与焦点:下拉走 0.4.1 的 useFlyout(--zIndexNavFlyout + 嵌套提升),触发面走 0.4.3 的 useFocusVisual(双层焦点矩形)。
  • 面板样式必须写在非 scoped 块:reka 的 SelectContent 把 class 落在 Teleport 到 body 的元素上,拿不到本组件的 data-v-*——scoped 选择器会静默失效(jsdom 不解析 var(),单测发现不了)。
  • 已知缺口:高对比度未实现;不实现 WinUI 的 IsTextSearchEnabled 前缀匹配(底座按字符跳转不算搜索);size 档位与 WinUI 的 Compact 样式未做。

API

FluereSelect

属性(Props)类型默认对应 / 说明
modelValueT | nullundefined受控选中值(v-model);undefined 为非受控
defaultValueT | nullnull非受控初始值
itemsFluereSelectItem<T>[][]ItemsSource;每项 value / text / disabled
openbooleanundefinedv-model:open;不传则内部自管
defaultOpenbooleanfalse非受控初始展开状态
disabledbooleanfalseIsEnabled
placeholderstring—PlaceholderText
headerstring—触发面上方标题;同时作为可访问名
labelstring—显式可访问名(优先于 header)
descriptionstring—触发面下方说明
namestring—透传隐藏 input 的字段名
bystring | ((a, b) => boolean)—自定义值相等判断(对象型选项必传)
dirDirection—文本方向
maxDropDownHeightnumber504MaxDropDownHeight(px)
事件(Emits)载荷对应 / 说明
update:modelValueT | null受控回写(v-model)
update:openboolean展开状态回写(v-model:open)
change{ value: T | null }选中项变化
插槽(Slots)说明
item自定义项渲染,作用域参数 { item, selected }
empty空列表文案(组件库不新增内建文案)
v0.5.0-alpha.1