推荐阅读:
http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
TextBox
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<TextBox x:Name="theTxtbx">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder x:Name="adornTheTxtbx"/>
</Border>
<TextBlock Foreground="Orange" FontWeight="Bold" Margin="0,25,0,0"
Text="{Binding ElementName=adornTheTxtbx, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
<TextBox.Text>
<Binding Path="XXX">
<Binding.ValidationRules>
<ExceptionValidationRule/>
<local:ValidateXXX/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
TIP:这里在 ControlTemplate 里为 AdornedElementPlaceHolder 命名,方便在后面的 Binding 中引用;
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBox x:Name="txtBx">
<TextBox.Text>
<Binding Path="XXX">
<Binding.ValidationRules>
<ExceptionValidationRule/>
<local:ValidateXXX/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Grid Grid.Row="1">
<TextBlock Text="{Binding ElementName=txtBx, Path=(Validation.Errors)[0].ErrorContent}" Foreground="Red" FontWeight="Bold"/>
</Grid>
</Grid>