Я попытался найти ответ на эту проблему и в каждом посте я считаю, что есть ответ на нахождение детей рекурсивны, но ни один из них не работают со скрытыми или разрушились детьмиНайти логический ребенок, включая скрытые и разрушился узлы
Кроме того, в в каждом посте кто-то спросил, возможно ли это, но никто не ответил, поэтому я начинаю думать, что это невозможно.
Если у кого-то есть способ сделать это, я буду вечно благодарен.
Моя функция выглядит следующим образом:
public static DependencyObject FindLogicalDescendentByName(this DependencyObject source, string name)
{
DependencyObject result = null;
IEnumerable children = LogicalTreeHelper.GetChildren(source);
foreach (var child in children)
{
if (child is DependencyObject)
{
if (child is FrameworkElement)
{
if ((child as FrameworkElement).Name.Equals(name))
result = (DependencyObject)child;
else
result = (child as DependencyObject).FindLogicalDescendentByName(name);
}
else
{
result = (child as DependencyObject).FindLogicalDescendentByName(name);
}
if (result != null)
return result;
}
}
return result;
}
-EDITED Итак, я понимаю, моя проблема заключается в том, что я пытался найти элемент, прежде чем он был создан,
Я связывание с свойство в xaml, которое исчезнет и найдет элемент по заданному имени, но элемент не был создан в тот момент времени, если я повторно заказал элемент в xaml, он работает и элемент найден ... doh!
Это все еще, кажется, не работает, у меня есть 2 возможных гаечные 1. Мои элементы управления находятся на третьей стороне панели, которая, как представляется, не имеет каких-либо элементов визуального дерева, но имеет логические элементы дерева, следовательно, используя логическое дерево. 2. Сторонняя панель и все элементы управления внутри находятся в словаре ресурсов и используются в качестве шаблона. – Kezza
Итак, я добавил небольшую панель стека вокруг двух элементов управления, которые я хотел найти, и я прошел через ваш код, и когда я доберусь до панели стека, а childCount возвращается из VisualTreeHelper, это значение равно 1, это элемент управления это видно, элемент управления, который не отображается, по-прежнему отсутствует ... они одного типа, и оба имеют атрибут x: Name – Kezza
Я понял, что я делал неправильно. спасибо за ваш ответ, хотя – Kezza