DependencyObjectExtension.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. 
  2. using System.Collections.Generic;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Media;
  6. namespace FWindSoft.Wpf
  7. {
  8. /// <summary>
  9. /// 依赖属性扩展
  10. /// </summary>
  11. public static class DependencyObjectExtensions
  12. {
  13. public static bool HasError(this DependencyObject depObject)
  14. {
  15. bool flag = false;
  16. #region 验证修改
  17. if (Validation.GetHasError(depObject))
  18. {
  19. flag = true;
  20. return flag;
  21. }
  22. #endregion
  23. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++)
  24. {
  25. var child = VisualTreeHelper.GetChild(depObject, i);
  26. if (child.HasError())
  27. {
  28. flag = true;
  29. break;
  30. }
  31. }
  32. return flag;
  33. }
  34. /// <summary>
  35. /// 判定元素是否错误
  36. /// </summary>
  37. /// <param name="depObject"></param>
  38. /// <param name="errorObject">返回错误元素</param>
  39. /// <returns></returns>
  40. public static bool HasError(this DependencyObject depObject,out DependencyObject errorObject)
  41. {
  42. bool flag = false;
  43. errorObject = null;
  44. if (Validation.GetHasError(depObject))
  45. {
  46. flag = true;
  47. errorObject = depObject;
  48. return flag;
  49. }
  50. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObject); i++)
  51. {
  52. var child = VisualTreeHelper.GetChild(depObject, i);
  53. if (child.HasError(out errorObject))
  54. {
  55. flag = true;
  56. break;
  57. }
  58. }
  59. return flag;
  60. }
  61. public static List<T> GetSpecifyTypeChildren<T>(this DependencyObject dependencyObject) where T : DependencyObject
  62. {
  63. List<T> list = new List<T>();
  64. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
  65. {
  66. var child = VisualTreeHelper.GetChild(dependencyObject, i);
  67. if (child is T)
  68. {
  69. list.Add((T)child);
  70. continue;
  71. }
  72. list.AddRange(child.GetSpecifyTypeChildren<T>());
  73. }
  74. return list;
  75. }
  76. }
  77. }