C# Avalonia怎么使用正则表达式验证输入 Avalonia TextBox验证

来源:这里教程网 时间:2026-02-21 17:35:15 作者:

在 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<textbox></textbox>
添加
Pattern
ErrorMessage
依赖属性
OnAttached
中订阅
TextChanged
,校验后触发
InvalidInput
事件或设置
IsInvalid
属性
XAML 中这样用:
<textbox behaviors:regexvalidationbehavior.pattern="^\d{11}$"></textbox>

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/行为)按项目需要选好。

相关推荐