Files
BeWoPlaner/Shared/Extensions/DependencyObjectExtensions.cs
2016-06-27 01:45:38 +02:00

58 lines
1.8 KiB
C#

using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;
namespace BS.Shared.Extensions
{
public static class DependencyObjectExtensions
{
public static T FindFirstVisualChild<T>(this DependencyObject pObj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(pObj); i++)
{
DependencyObject lChild = VisualTreeHelper.GetChild(pObj, i);
if (lChild != null && lChild is T)
{
return (T)lChild;
}
else
{
T lChildOfChild = lChild.FindFirstVisualChild<T>();
if (lChildOfChild != null)
{
return lChildOfChild;
}
}
}
return null;
}
public static IEnumerable<DependencyObject> GetAllChildren(this DependencyObject pObj)
{
var result = new List<DependencyObject>();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(pObj); i++)
{
var lChild = VisualTreeHelper.GetChild(pObj, i);
result.Add(lChild);
result.AddRange(GetAllChildren(lChild));
}
return result;
}
public static T GetVisualParent<T>(this DependencyObject pObj) where T : DependencyObject
{
var parent = pObj;
while (parent != null)
{
parent = VisualTreeHelper.GetParent(parent) as Visual;
if (parent != null && parent.GetType() == typeof(T))
return parent as T;
}
return parent as T;
}
}
}