Skip to content

Radio 单选框 ​

单选框。圆环 + 内圆点,点击命中整行;组件本身不含组逻辑,由宿主维护单选组。

契约源:lh-ui-core/specs/radio.json · 黄金用例:lh-ui-core/cases/radio.json(6 条,已翻译为 xUnit 测试)

基础用法 ​

宿主监听 Change 后把同组其它项的 Checked 置为 false,即实现单选组。

9:41Radio 基础
青花瓷
粉彩瓷

HTML 模拟预览(Windows / WinUI 3 外观),非真机渲染

csharp
var radio = new LhRadio
{
    Label = "青花瓷",
    Value = "qinghua",
    Checked = true,
};
radio.Change += isChecked => { /* 仅未选中且未禁用时触发;宿主维护单选组 */ };

尺寸 ​

三档尺寸映射到 radio.size.* 圆环尺寸令牌;内圆点直径 = 尺寸 × radio.dotScale。

9:41Radio 尺寸
小型
中型
大型

HTML 模拟预览(Windows / WinUI 3 外观),非真机渲染

状态 ​

Disabled 时不响应点击,外环取 color.disabled.border、圆点取 color.disabled.text; 已选中态再次点击不触发 Change。

9:41Radio 状态
禁用未选中
禁用选中

HTML 模拟预览(Windows / WinUI 3 外观),非真机渲染

API ​

属性 ​

属性说明类型默认值
Change选中态变化回调;仅未选中且未禁用时触发(payload 恒为 true)event Action<bool>—
Checked是否选中boolfalse
Disabled是否禁用(不响应点击且呈现禁用样式)boolfalse
Label文字标签(绘制在圆环右侧)string""
Value单选值(组内标识,组件本身不含组逻辑)string""
Size圆环尺寸,映射到 radio.size.* 令牌LhRadioSizeMedium

LhRadioSize ​

值尺寸令牌
Smallradio.size.small(14epx)
Mediumradio.size.medium(16epx)
Largeradio.size.large(18epx)

令牌对照 ​

令牌用途
radio.size.{small,medium,large}三档圆环尺寸
radio.ringWidth外环描边宽度
radio.dotScale内圆点直径比例(尺寸 × dotScale)
radio.gap圆环与文字间距
color.primary.default选中态外环与圆点色
color.border.base未选中外环色
color.disabled.{border,text}禁用态外环/圆点
color.text.{primary,disabled}标签文字色
typography.fontSize.base / fontFamily标签字号与字体栈

黄金用例对照 ​

cases/radio.json 的 6 条断言与 xUnit 测试的对应关系(tests/LhRadioTests.cs):

case id断言本地测试
tap-unchecked-emits-onchange未选中点击触发 onChangeTap_Unchecked_Emits_OnChange
tap-checked-keeps-checked已选中再点不触发Tap_Checked_Keeps_Checked
disabled-blocks-change禁用态不可交互Disabled_Blocks_Change
checked-uses-primary-tokens选中态消费主色令牌Checked_Uses_Primary_Tokens
unchecked-uses-border-token未选中态消费描边令牌Unchecked_Uses_Border_Token
small-size-uses-small-token小号消费 small 尺寸令牌Small_Size_Uses_Small_Token

另有暗色专项:Dark_Colors_Come_From_Dark_Tokens / Dimensions_Are_Identical_In_Dark_Mode。 运行:cd lh-ui-windows && dotnet test。