I have create custom validator and error template. Error template is below.
<ControlTemplate x:Key="errorTmp">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="1" BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder x:Name="Adorner"/>
</Border>
<TextBlock Grid.Row="0" Foreground="Red" Text="{Binding ElementName=Adorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" Margin="0,0,0,5"></TextBlock>
</Grid>
</ControlTemplate>
problem is error message is getting overlapped on other control.
You need to reserve space for the element in the adorner layer. You could do this by increasing the Margin property of the TextBox control itself when its Validation.HasError property returns true.
In this case you could set the top margin of the TextBox to the same height as the first row of the Grid in your Validation.ErrorTemplate:
Since the rendering of an adorner is independent from rendering of the UIElement that the adorner is bound to, there is no way for the TextBox to automatically adjusts its position when adorner is visible. That's why you have to reserve the space for the adorner element explicitly yourself.