Search code examples
c#wpftreeviewitem

How I can get content of TreeViewItem in WPF?


For example, my TreeViewItem' header consists of TextBlock and Image. How I can get references to them?


Solution

  • I'm not sure if I got you right, but if you want to get visual children of an element, try using VisualTreeHelper.GetChild and VisualTreeHelper.GetChildrenCount.

    PS: usually it's more problematic to get a reference to the TreeViewItem itself...

    UPDATE (A code example for future generations):

    private IEnumerable<DependencyObject> GetChildren(DependencyObject parent)
    {
        var count = VisualTreeHelper.GetChildrenCount(parent);
        if (count > 0)
        {
            for (int i = 0; i < count; i++)
                yield return VisualTreeHelper.GetChild(parent, i);
        }
        else
            yield break;
    }
    
    private DependencyObject FindInTheVT(DependencyObject parent,Predicate<DependencyObject> predicate)
    {
        IEnumerable<DependencyObject> layer = GetChildren(parent);
    
        while (layer.Any())
        {
            foreach (var d in layer)
                if (predicate(d)) return d;
    
            layer = layer.SelectMany(x => GetChildren(x));
        }
    
        return null;
    }