zoukankan      html  css  js  c++  java
  • WPF 验证表单方法2

    示例来自How to disable a Button on TextBox ValidationErrors in WPF
    效果如图

    继承ValidationRule实现验证类

    public class OverThirteenValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            if (value != null)
            {
                int age = 0;
                try
                {
                    age = Convert.ToInt32(value);
                }
                catch
                {
                    return new ValidationResult(false, "You must be older than 13!");
                }
    
                if (age > 13)
                    return ValidationResult.ValidResult;
    
            }
            return new ValidationResult(false, "You must be older than 13!");
        }
    }
    

    通过MultiDataTrigger绑定提交按钮的IsEnabled属性

    通过Path获得每个输入框的Validation.HasError值,当所有TextBox的HasError=false时,设置提交按钮可用

    <Button Content="Submit" Name="buttonSubmit">
        <Button.Style>
            <Style TargetType="{x:Type Button}">
                <Setter Property="IsEnabled" Value="false" />
                <Style.Triggers>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding ElementName=TextBoxFirstName, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=TextBoxLastName, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=TextBoxAge, Path=(Validation.HasError)}" Value="false" />
                            <Condition Binding="{Binding ElementName=TextBoxPhone, Path=(Validation.HasError)}" Value="false" />
                        </MultiDataTrigger.Conditions>
                        <Setter Property="IsEnabled" Value="true" />
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
    

    显示提示信息

    同样通过Validation.Errors的值判断是否显示提示信息,这里用了一个Converter(ToVisibility),判断错误信息个数是否为0,为0则不显示,不为0则显示
    显示内容为(Validation.Errors)[0].ErrorContent,即第一个错误内容,即如果有多个验证、有多个报错内容也只显示第一个

    <TextBlock Visibility="{Binding ElementName=TextBoxAge, Path=(Validation.Errors), Converter={StaticResource ToVisibility}}">>
        <TextBlock.Text>
            <MultiBinding StringFormat="Age - {0}">
                <Binding ElementName="TextBoxAge" Path="(Validation.Errors)[0].ErrorContent"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
    

    示例代码

    ValidationRule 类

    参考资料

    How to: Implement Binding Validation
    How to disable a Button on TextBox ValidationErrors in WPF
    Accessing WPF control validation rules from code

  • 相关阅读:
    css3-13 如何改变文本框的轮廓颜色
    css3-13 css3的3D动画如何实现
    poj 2565 Ants (KM+思维)
    C语言功能 --C
    jQuery简要dom操作
    最近ubuntu 14.04 cpu高入住故障排除
    spring framework 4 源代码阅读器(1) --- 事前准备
    基于Haar特征Adaboost人脸检测级联分类
    ZOJ-3652-Maze(BFS)
    设计模式
  • 原文地址:https://www.cnblogs.com/Lulus/p/13786297.html
Copyright © 2011-2022 走看看