Question:
How to get in Silverlight all children of a given control?Get all children of a given type from a control in Silverlight 4?
Answer:
You use the helper class VisualTreehelper
The following extension method gets all children of a certain type recursively.
public static IEnumerable<T> GetChildrenRecursive<T>(this DependencyObject elm) where T : DependencyObject
{
var childrenCount = VisualTreeHelper.GetChildrenCount(elm);
for (int i = 0; i < childrenCount; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(elm, i);
if (child is T)
{
yield return (child as T);
}
else
{
foreach (var children in GetChildrenRecursive<T>(child))
{
yield return children;
}
}
}
}
The following extension method gets all children of any DependencyObject in Silverlight, recursively.
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendent in Descendents(child))
yield return descendent;
}
}
No comments:
Post a Comment