Avalonia中TextBox正则验证核心是监听输入并反馈:可通过TextChanged事件+Regex.IsMatch校验并添加CSS类,或MVVM模式下在ViewModel属性setter中校验并实现INotifyDataErrorInfo,亦可封装为RegexValidationBehavior复用。

在 Avalonia 中对 TextBox 进行正则表达式验证,核心思路是监听输入变化(如 TextChanged 事件或绑定 Text 属性),用正则判断当前文本是否合法,并通过 UI 反馈(如边框变色、显示提示)告知用户。Avalonia 本身不内置“正则验证器”控件,但实现起来很轻量。
监听 TextChanged 事件 + 正则匹配
这是最直接的方式,适合简单场景:
- 在 XAML 中给 TextBox 设置
TextChanged事件处理函数 - 在后台代码中用
Regex.IsMatch(text, pattern)判断 - 匹配失败时设置
TextBox.Classes.Add("invalid"),并在 CSS 中定义.invalid { border: 2px solid #e53935; } - 可选:同步更新绑定的 ViewModel 属性(若使用 MVVM),或禁用提交按钮
绑定 Text 属性 + 在 ViewModel 中验证(推荐 MVVM)
更符合 Avalonia 推荐的 MVVM 模式:
- 将 TextBox 的
Text绑定到 ViewModel 的字符串属性(如UserName) - 在该属性的 setter 中执行正则校验:
if (!Regex.IsMatch(value, @"^[a-zA-Z0-9_]{3,16}$")) throw new ArgumentException("用户名格式不合法"); - 搭配
INotifyDataErrorInfo接口,把错误信息暴露给视图,Avalonia 会自动响应并高亮控件(需启用ValidationErrorsTemplate或自定义样式) - 优点:逻辑集中、可测试、支持异步验证(如检查用户名是否已存在)
封装成可复用的验证行为(Behavior)
如果多个 TextBox 都需要类似验证,可以写一个 RegexValidationBehavior:
- 继承
Avalonia.Interactivity.Behavior - 添加
Pattern和ErrorMessage依赖属性 - 在
OnAttached中订阅TextChanged,校验后触发InvalidInput事件或设置IsInvalid属性 - XAML 中这样用:
CSS 样式反馈要配合使用
光有逻辑不够,UI 提示必须清晰:
- 定义
.textbox-invalid { border-color: #d32f2f; }和.textbox-valid { border-color: #4caf50; } - 在代码中动态增删 Class:
textBox.Classes.Set(":invalid", !isValid); - 可额外加
ToolTip显示错误原因,例如:textBox.ToolTip = isValid ? null : "手机号必须为11位数字";
基本上就这些。不需要引入第三方库,.NET 内置 System.Text.RegularExpressions 完全够用。关键是把验证时机(输入中/失焦后)、反馈方式(样式/提示/禁用操作)和架构风格(代码后台/MVVM/行为)按项目需要选好。










