WpfHelper.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Windows;
  2. using System.Windows.Media;
  3. namespace System.Windows.Forms
  4. {
  5. public static class WpfHelper
  6. {
  7. public static T FindAncestor<T>(DependencyObject obj) where T : class
  8. {
  9. var parent = VisualTreeHelper.GetParent(obj);
  10. if (parent == null)
  11. return null;
  12. if (parent is T)
  13. return parent as T;
  14. return FindAncestor<T>(parent);
  15. }
  16. public static T FindParent<T>(FrameworkElement obj) where T : class
  17. {
  18. var parent = obj.Parent as FrameworkElement;
  19. if (parent == null)
  20. return null;
  21. if (parent is T)
  22. return parent as T;
  23. return FindParent<T>(parent);
  24. }
  25. public static T GetChildOfType<T>(this DependencyObject depObj) where T : DependencyObject
  26. {
  27. if (depObj == null)
  28. return null;
  29. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
  30. {
  31. var child = VisualTreeHelper.GetChild(depObj, i);
  32. var result = (child as T) ?? GetChildOfType<T>(child);
  33. if (result != null)
  34. return result;
  35. }
  36. return null;
  37. }
  38. public static Rect BoundsRelativeTo(this FrameworkElement child, Visual parent)
  39. {
  40. var gt = child.TransformToAncestor(parent);
  41. return gt.TransformBounds(new Rect(0, 0, child.ActualWidth, child.ActualHeight));
  42. }
  43. }
  44. }