WPF,输入验证
WPF中讲到的验证,是绑定的验证。是目标---源、源--目标的验证
如果我只是单纯的想在TextBox中输入不大于20的数字,与绑定没有关系,那该怎么使用WPF的验证呢?这种情况比绑定似乎还要多些。并且要求验证没有通过的时候,仍然可以让边框变红、或者使用自定义的错误指示符号....
这该怎么做的呢?
[解决办法]
可以做一个虚假的绑定,比如绑定到自身:
<StackPanel>
<TextBox>
<TextBox.Text>
<Binding RelativeSource="{RelativeSource Self}" Path="Tag" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:RangeRule Min="0" Max="20" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
public class RangeRule : ValidationRule
{
public int Min { get; set; }
public int Max { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int num;
if (!int.TryParse(value as string, out num)
[解决办法]
num < Min
[解决办法]
num > Max)
return new ValidationResult(false, "Please enter a number in the range: " + Min + " - " + Max + ".");
else
return new ValidationResult(true, null);
}
}
如果完全不用绑定的话,那就要在LostFocus或KeyDown/KeyUp事件中自己判断并且画出出错时的UI提示。
[解决办法]
把Text的值绑定到tag值,反正tag值一般不用。