c# - 文本框验证:控制/复制系统验证边框?
问题描述
我想验证应用程序的文本框条目,并在出现错误时提供视觉和口头反馈。我希望您在使用ValidationRules
or时从 wpf 获得正常的文本框边框行为INotifyDataError
,然后在单独的 TextBlock 中显示错误消息。标准的东西。我有几种方法可以解决这个问题,但每一种都给我带来了问题。
ValidationRules
似乎是最简单的基于系统的方法。我的问题是将错误消息绑定到单独的 TextBlock。大多数示例使用内容呈现器或错误模板,但是没有简单的方法可以ValidationResult
直接绑定到 a 吗?(问题 1)
INotifyDataError
作为更现代的方法在理论上很好,但对于我正在做的事情来说似乎太复杂了。
但是,我发现最简单的方法是直接在 Viewmodel 的属性设置器中进行验证。像这样的东西:
private string _fileName;
public string FileName
{
get {return _fileName;}
set
{
_fileName = value;
if(String.IsEmptyOrNull(value))
{
FileNameError = "File must have a name.";
}
else
{
FileNameError = null;
}
RaisePropertyChanged();
}
}
private string _fileNameError;
public string FileNameError
{
get {return _fileNameError;}
set
{
_fileNameError = value;
RaisePropertyChanged();
}
}
然后,为了显示错误,我可以将 2x 绑定到FileNameError
:一次显示 TextBlock 中的文本,另一个通过转换器(检查!null)显示 TextBox 周围的红色边框。
WPF 处理红色边框的方式的问题要好得多;它似乎是它自己的元素,而不是实际的边界。当我尝试使用我的 StringToBorderBrush 转换器时,边框的粗细会减小 TextBox 的大小,因此不再排列整齐。双重打击是,通过将 BorderBrush 设置为透明,我失去了我想保留的 TextBox 的默认边框和焦点边框。
那么有没有办法复制 WPF 对边框所做的事情,或者以某种方式使用属性来控制它?我认为这是可能的,因为当它用ValidationRules
or显示时必须调用它INotifyDataError
,对吗?(问题2)
解决方案
推荐阅读
- jenkins - 如何对某些分支执行 git checkout,然后使用 Jenkins 为私有存储库执行 git pull?
- python - 在 geom_density 中使用分类列时出错
- sql - Postgres 索引统计信息 - 上次使用日期
- excel - 声明包含后期绑定字典对象的自定义数据类型
- django - 用于座位预订的 Django 模型
- php - 无法实例化接口 phpDocumentor\Reflection\Project
- c# - 如何判断app是否存在?(Process.Start 可以找到它们)
- pyspark - Pyspark 中的 GroupBy 操作
- rest - 如何在 WebApi Core 中设计多个 Patch 请求
- f# - 关于使用 Hopac 创建 Alt