日期:2014-05-17  浏览次数:20979 次

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);