VisualTreeExtend.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* ==============================================================================
  2. * 功能描述:VisualTreeExtend
  3. * 创 建 者:Garrett
  4. * 创建日期:2017/11/9 16:08:37
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows;
  12. using System.Windows.Media;
  13. namespace SAGA.DotNetUtils.WPF
  14. {
  15. /// <summary>
  16. /// VisualTreeExtend
  17. /// </summary>
  18. public class VisualTreeExtend
  19. {
  20. /// <summary>
  21. /// 查找可视化树的Parent
  22. /// </summary>
  23. /// <typeparam name="T"></typeparam>
  24. /// <param name="source"></param>
  25. /// <returns></returns>
  26. public static DependencyObject VisualUpwardSearch<T>(DependencyObject source)
  27. {
  28. while (source != null && source.GetType() != typeof(T))
  29. source = VisualTreeHelper.GetParent(source);
  30. return source;
  31. }
  32. /// <summary>
  33. /// 获取ItemTemplate内部的各种控件
  34. /// </summary>
  35. /// <typeparam name="childItem"></typeparam>
  36. /// <param name="obj"></param>
  37. /// <returns></returns>
  38. public static childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
  39. {
  40. int count = VisualTreeHelper.GetChildrenCount(obj);
  41. for (int i = 0; i < count; i++)
  42. {
  43. DependencyObject child = VisualTreeHelper.GetChild(obj, i);
  44. if (child != null && child is childItem)
  45. return (childItem)child;
  46. else
  47. {
  48. childItem childOfChild = FindVisualChild<childItem>(child);
  49. if (childOfChild != null)
  50. return childOfChild;
  51. }
  52. }
  53. return null;
  54. }
  55. }
  56. }