WPFでは入力規制を視覚的にフィードバックしてくれる仕組みがある。
その入力規制のエラー有り無しをコード側からチェックするには、
ValidationクラスのGetHasErrorメソッドを使えばよい。
エラーがあった場合はGetErrorsメソッドによってエラー内容を取得できる。
1画面にたくさんのコントロールが並ぶ場合、1つ1つチェックするコードを書くのは面倒だが、
コントロールのツリー構造をたどる事で一括でチェックする事が出来る。
以下は、コントロールのツリー構造をたどり、エラーのあるコントロールを取得する。
using System; using System.Windows; using System.Windows.Controls; namespace xxxx { public class UIHelper { public static DependencyObject GetValidationError(DependencyObject element) { if (null == element) return null; if (Validation.GetHasError(element)) return element; for (int i = 0; i != System.Windows.Media.VisualTreeHelper.GetChildrenCount(element); ++i) { var child = System.Windows.Media.VisualTreeHelper.GetChild(element, i); var ret = GetValidationError(child); if (null != ret) return ret; } return null; } } }
上記メソッドへ、複数のコントロールが配置されたパネルなどを引数とすると、子階層も含めエラー箇所を有無を確認出来る。
var errObj = UIHelper.GetValidationError(this.MyPanel); if (null != errObj) { var errElem = errObj as UIElement; if (null != errElem) errElem.Focus(); var err = Validation.GetErrors(errObj); MessageBox.Show(err[0].ErrorContent.ToString(), "ERROR!", MessageBoxButton.OK, MessageBoxImage.Information); return; }
コメントをお書きください