主题与状态
主题和状态决定组件在不同交互场景下的视觉表现。DirectSurface UI 通过主题数据和组件 token 保持整体视觉一致。
更具体的业务页面视觉与交互规则见 组件设计系统。其中 Design Tokens 标准、颜色使用模式、组件状态标准和组件交互模式用于统一业务页面的主题、密度和反馈行为。
ThemeData
ThemeData 描述颜色、字体、边框、焦点和组件状态等基础信息。组件绘制时应从当前主题读取颜色和尺寸,不应硬编码大量局部样式。
常见主题内容:
- 背景色。
- 文本色。
- 强调色。
- 边框色。
- 焦点框。
- hover / selected / disabled 状态色。
- 字体族和字号。
组件状态
常见状态包括:
- normal。
- hovered。
- pressed。
- focused。
- selected。
- disabled。
- readonly。
- loading。
- error / warning / success。
组件应清晰区分这些状态,尤其是 hover、selected、focused 和 disabled,避免用户无法判断当前控件是否可操作。
组件公开状态的业务契约见 组件基础状态契约。其中 visible 用于是否参与渲染树,disabled 用于整体不可交互,readonly 用于值可看但不可改。
状态颜色原则
- hover 颜色必须和背景有足够对比度。
- selected 状态必须比 hover 更明确。
- disabled 状态应弱化,但仍可读。
- placeholder 颜色必须明显弱于真实值。
- 深色背景下 hover 应更亮,浅色背景下 hover 应更深。
统一交互行为
通用状态行为应沉到组件层,而不是每个页面重复处理。
例如:
- TreeView 文本省略时 tooltip 展示完整文本。
- Dropdown 候选项 hover 颜色和分割线风格统一。
- GridView、TreeView、ScrollViewer 滚动条风格一致。
- IconButton hover 时显示 tooltip。
自定义样式边界
页面可以组合组件,但不应该复制组件内部状态绘制逻辑。若多个页面都需要相同行为,应提取到组件或主题 token。
业务个性化可以通过:
- 组件参数。
- theme token。
- row / cell style resolver。
- 命令状态。
性能原则
主题变化会影响大量组件绘制。切换主题时可以触发整树刷新,但普通 hover、focus、selected 不应重算整页布局。