我是WPF的新手。在我的UserControl中,我有8个标签及其各自的8个文本框如下:
1.Label : abc 2.Label : def
TextBox1 : TextBox2 :
3.Label :xyz 4. Label : ghi
Textbox3 : TextBox4 :
这些文本框文本属性中的每一个都应包含以其各自标签名称结尾的文本
对于TextBox1.text
应为xxxx.abc
,TextBox2.text
应为xxxx.def,依此类推。如果文本框不应为红色边框。
希望我对细节很清楚。所以我是否需要为每个文本框编写不同的ValidationRule
?
你输入的任何内容??
答案 0 :(得分:24)
为什么没有一个ValidationRule
实现,有一个属性暴露字段应该结束的内容,例如:
public class EndsWithValidationRule : ValidationRule
{
public string MustEndWith { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
var str = value as string;
if(str == null)
{
return new ValidationResult(false, "Please enter some text");
}
if(!str.EndsWith(MustEndWith))
{
return new ValidationResult(false, String.Format("Text must end with '{0}'", MustEndWith));
}
return new ValidationResult(true, null);
}
}
然后你可以像这样使用它:
<TextBox x:Name="TextBox1">
<TextBox.Text>
<Binding Path="BoundProperty1" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:EndsWithValidationRule MustEndWith=".def" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<TextBox x:Name="TextBox2">
<TextBox.Text>
<Binding Path="BoundProperty2" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:EndsWithValidationRule MustEndWith=".abc" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>