1、首先通过异常提示信息来定义验证信息

 

/// <summary>
    /// 异常验证
    /// </summary>
    public class SimpleCustomer
    {
        public SimpleCustomer()
        { }

        private string m_strName;
        public string Name
        {
            set
            {
                this.m_strName = value;
                if (String.IsNullOrEmpty(this.m_strName))
                {
                    throw new ApplicationException("Customer name is mandatory.");
                }
            }
            get
            {
                return this.m_strName;
            }
        }

        private string m_strAddress;
        public string Address
        {
            set
            {
                this.m_strAddress = value;
            }
            get
            {
                return this.m_strAddress;
            }
        }
    }

 

XAML

<TextBox Width="200" Margin="5">
                    <TextBox.Text>
                        <Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <ExceptionValidationRule />
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>

 

逻辑代码

 

/// <summary>
    /// Window2.xaml 的交互逻辑
    /// </summary>
    public partial class Window2 : Window
    {
        public Window2()
        {
            InitializeComponent();
            SimpleCustomer c = new SimpleCustomer();
            c.Name = "Fred";
            c.Address = "1/3 Powell Street";
            this.DataContext = c;
        }


    }

 

 

自定义验证控件提示信息

 

/// <summary>
    /// 自定义验证
    /// </summary>
    public class StringRangeValidationRule : ValidationRule
    {
        public StringRangeValidationRule()
        { }

        private int m_intMinimumLength = -1;
        public int MinimumLength
        {
            set
            {
                this.m_intMinimumLength = value;
            }
            get
            {
                return this.m_intMinimumLength;
            }
        }

        private int m_intMaximumLength = -1;
        public int MaximumLength
        {
            set
            {
                this.m_intMaximumLength = value;
            }
            get
            {
                return this.m_intMaximumLength;
            }
        }

        private string m_strErrorMessage = string.Empty;
        public string ErrorMessage
        {
            set
            {
                this.m_strErrorMessage = value;
            }
            get
            {
                return this.m_strErrorMessage;
            }
        }

        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            ValidationResult result = new ValidationResult(true, null);
            string inputString = (value ?? string.Empty).ToString();
            if (inputString == null)
            {
                inputString = string.Empty;
            }

            if (inputString.Length < this.m_intMinimumLength ||
                (this.m_intMaximumLength > 0 && inputString.Length > this.m_intMaximumLength))
            {
                return new ValidationResult(false, this.ErrorMessage);
            }
            return result;
        }  
    }

 

XAML

<TextBox Width="200" Margin="5">
                    <TextBox.Text>
                        <Binding Path="Address" UpdateSourceTrigger="PropertyChanged">
                            <Binding.ValidationRules>
                                <local:StringRangeValidationRule MinimumLength="1" MaximumLength="30"
          ErrorMessage="Address is required and must be less than 30 letters." />
                            </Binding.ValidationRules>
                        </Binding>
                    </TextBox.Text>
                </TextBox>

 

公共资源

 

<Application.Resources>
        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="True">

                            <TextBlock DockPanel.Dock="Right"
        Foreground="Orange"
        Margin="5"
        FontSize="12pt"
        Text="{Binding ElementName=MyAdorner,
                               Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
       </TextBlock>

                            <Border BorderBrush="Green" BorderThickness="3">
                                <AdornedElementPlaceholder Name="MyAdorner" />
                            </Border>

                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip"
      Value="{Binding RelativeSource={RelativeSource Self},
                       Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

    </Application.Resources>