希望我能很好地解释这一点。
我要实现的目的是创建一个限制文本框中字符大小的验证规则,并将其应用于多个文本框,但是不将其添加到每个文本框中内容的Textbox.Text
属性中应用程序。
我已经创建了验证规则:
public class TexboxFieldLengthValidationRule : ValidationRule {
public int MaxLength { private get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo) {
var result = new ValidationResult(true, null);
var input = (value ?? string.Empty).ToString();
if (string.IsNullOrEmpty(input)) {
return new ValidationResult(false, "This field cannot be empty.");
}
return input.Length > MaxLength
? new ValidationResult(false, "Maximum number of characters is " + MaxLength + ".")
: result;
}
}
我有几个看起来像这样的文本框:
<TextBox
Grid.Row="2"
Grid.Column="1"
Margin="0,5,5,0"
mah:TextBoxHelper.ClearTextButton="True"
mah:TextBoxHelper.Watermark="Remote File Separator (one character maximum)">
<TextBox.Text>
<Binding
Mode="TwoWay"
NotifyOnValidationError="True"
Path="Ftp.RemoteFileSeparator"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validation:TexboxFieldLengthValidationRule MaxLength="1" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
是否可以通过某种可绑定属性或样式应用此验证规则?因为在解决方案中为每个文本框添加10行代码并不是很好。
我发现的另一种方法是在属性的设置器中引发异常,并使用ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnExceptions=True
,对此我不确定其效果如何。