MAUI通过Visual State Manager(VSM)声明式管理控件状态,支持Normal、Disabled、Focused、PointerOver等通用状态及Button、CheckBox等专属状态;推荐用样式资源统一定义,状态自动切换,需注意平台兼容性与命名准确。
MAUI 使用 Visual State Manager(VSM)管理控件状态,核心是通过声明式 XAML 定义不同状态下的外观变化,无需写大量代码就能响应用户交互。关键不是“能不能改样式”,而是“在哪改、改哪些状态、怎么复用”。
常见控件支持的状态有哪些
所有继承自
VisualElement
的控件(如 Entry、Button、Label)都默认支持以下通用状态:
Normal
:默认状态,必须定义(即使不写 Setter,也建议显式声明)
Disabled
:控件
时触发
Focused
:获得键盘或输入焦点时(比如点击 Entry 后光标出现)
PointerOver
:仅在桌面平台(Windows/
mac
OS)鼠标悬停时生效
部分控件还有专属状态:
Button
:额外支持
CheckBox / RadioButton
:支持
/
、
Switch
:支持
、
CollectionView / CarouselView
:支持
、
等导航相关状态
两种写法:直接写在控件里 or 提取为样式资源
推荐优先用样式资源(
),便于复用和维护;调试阶段可先写在控件内快速验证。
✅ 写在控件内(适合单点调试):
✅ 提取为隐式样式(推荐用于全项目统一):
这样所有
都自动应用该状态逻辑,不用每个都重复写。
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
状态切换是自动的,但得确保条件成立
VSM 不需要手动调用“切换状态”,只要控件属性变化满足内置规则,就会自动激活对应状态:
设置
→ 自动进入
状态
点击 Entry 或按 Tab 进入 → 触发
鼠标移入 Button → 在 Windows/macOS 上触发
(iOS/Android 不支持)
按下 Button → 自动进入
(松开后自动回退到 Normal 或其他当前有效状态)
⚠️ 注意:如果某个状态没生效,先检查是否拼错状态名(比如写成
而非
),或目标平台是否支持(如
在移动端无效)。
自定义状态(进阶用法)
除了内置状态,你还可以定义自己的状态组和状态,配合代码控制:
然后在后台 C# 中切换:
适用于主题切换、表单步骤高亮等场景。
基本上就这些。状态管理不复杂,但容易忽略平台差异和状态命名一致性。把常用状态提前定义好,后续开发会省不少事。
IsEnabled="False"PressedIsCheckedCheckedUncheckedOnOffSelectedCurrentItemStyle
EntryIsEnabled="False"DisabledFocusedPointerOverPressedFocusFocusedPointerOverVisualStateManager.GoToState(myButton, "Dark");