1. private void GetErrors(StringBuilder sb, DependencyObject obj){  
  2.             foreach (object child in LogicalTreeHelper.GetChildren(obj)){  
  3.                 TextBox element = child as TextBox;  
  4.                 if (element == null)   
  5.                     continue;  
  6.                 if (Validation.GetHasError(element)){  
  7.                     sb.Append(element.Text + " has errors:\r\n");  
  8.                     foreach (ValidationError error in Validation.GetErrors(element)){  
  9.                         sb.Append(" " + error.ErrorContent.ToString());  
  10.                         sb.Append("\r\n");  
  11.                     }  
  12.                 }  
  13.             }  
  14.         }  
  15.   
  16.         private bool FromHasErrors(out string message){  
  17.             StringBuilder sb = new StringBuilder();  
  18.             GetErrors(sb, stackProductDetails);  
  19.             message = sb.ToString();  
  20.             return message != "";  
  21.         }  
  22.   
  23.         private void cmdOK_Click(object sender, RoutedEventArgs e){  
  24.             string message;  
  25.             if (FromHasErrors(out message)){  
  26.                 MessageBox.Show(message);  
  27.             }  
  28.             else{  
  29.                 // ...  
  30.             }  
  31.         }  
  32.     }  

 http://blog.csdn.net/iHuoBaby/article/details/8576165