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