using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace FWindSoft.Wpf { /// /// 依赖属性扩展 /// public static class DependencyObjectExtensions { public static bool HasError(this DependencyObject depObject) { bool flag = false; #region 验证修改 if (Validation.GetHasError(depObject)) { flag = true; return flag; } #endregion for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++) { var child = VisualTreeHelper.GetChild(depObject, i); if (child.HasError()) { flag = true; break; } } return flag; } /// /// 判定元素是否错误 /// /// /// 返回错误元素 /// public static bool HasError(this DependencyObject depObject,out DependencyObject errorObject) { bool flag = false; errorObject = null; if (Validation.GetHasError(depObject)) { flag = true; errorObject = depObject; return flag; } for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++) { var child = VisualTreeHelper.GetChild(depObject, i); if (child.HasError(out errorObject)) { flag = true; break; } } return flag; } public static List GetSpecifyTypeChildren(this DependencyObject dependencyObject) where T : DependencyObject { List list = new List(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++) { var child = VisualTreeHelper.GetChild(dependencyObject, i); if (child is T) { list.Add((T)child); continue; } list.AddRange(child.GetSpecifyTypeChildren()); } return list; } } }