Search code examples
c#.netwpf

Find all controls in WPF Window by type


I'm looking for a way to find all controls on Window by their type,

for example: find all TextBoxes, find all controls implementing specific interface etc.


Solution

  • This should do the trick:

    public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj == null) yield return (T)Enumerable.Empty<T>();
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            DependencyObject ithChild = VisualTreeHelper.GetChild(depObj, i);
            if (ithChild == null) continue;
            if (ithChild is T t) yield return t;
            foreach (T childOfChild in FindVisualChildren<T>(ithChild)) yield return childOfChild;
        }
    }
    

    then you enumerate over the controls like so

    foreach (TextBlock tb in FindVisualChildren<TextBlock>(window))
    {
        // do something with tb here
    }