For example, my TreeViewItem' header consists of TextBlock and Image. How I can get references to them?
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;
}