How to show WPF ValidationResult in a seperate textblock?

Total Post:110

 2888  View(s)
Rate this:

I am trying to use in WPF a validating input of databound controls with validation rules. I have a posintValidationRule class:

       public class posintValidationRule : ValidationRule
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        string _strInt = value.ToString();
        int _int = -1;
        if (!Int32.TryParse(_strInt, out _int))
            return new ValidationResult(false, "Value must be an integer");
        if (_int < 0)
            return new ValidationResult(false, "Value must be positive");
        return new ValidationResult(true, null);

In XAML there is also a style error template:

   <Setter Property="Validation.ErrorTemplate">
            <Border BorderBrush="Red" BorderThickness="1" >
            <TextBlock Text="there is an error"></TextBlock>
     <Trigger Property="Validation.HasError" Value="true">
            Value="{Binding RelativeSource={RelativeSource Self},

When validation error occurs, the text of ValidationResult from posintValidationRule class appears in a tooltip ("Value must be an integer" and the like).

How I could have this the same text shown in a TextBlock from a Validation.ErrorTemplate which now, in case of an error, says just: "there is an error"?

  1. Post:378

    Re: How to show WPF ValidationResult in a seperate textblock?

    Hi Jeet,

    I have found the solution:

    <Style TargetType="{x:Type TextBox}">
           <Setter Property="Validation.ErrorTemplate">
                    <Border BorderBrush="Red" BorderThickness="1" Margin="5,0,5,0" >
                        <AdornedElementPlaceholder Name="MyAdorner" ></AdornedElementPlaceholder>
                    <TextBlock                     Margin="5,0,0,0"
                          Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
           </Setter.Value>     </Setter>

      Modified On Mar-31-2018 01:15:38 AM