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;
}

コメント
コメントを投稿