17370845950

C# Avalonia怎么使用正则表达式验证输入 Avalonia TextBox验证
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
  • 添加 PatternErrorMessage 依赖属性
  • 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/行为)按项目需要选好。