У меня есть UserControl
дочерний элемент в другом UserControl
(он действует как TabItem в TabControl
). Между дочерним элементом UserControl
и предком TabItem находится ряд других элементов управления (например: Grid
s, StackPanel
, возможно ScrollViewer
и т. Д.).
Я хочу получить доступ к свойству TabItem UserControl
в моем дочернем элементе UserControl
и настроить обычно предложенную рекурсивную функцию, которая проходит по дереву визуалов. Однако это всегда возвращало true
при первой проверке нуля, пока я не добавил запрос в логическое дерево.
Код:
public MyTabItem FindParentTabItem(DependencyObject child)
{
DependencyObject parent = VisualTreeHelper.GetParent(child) ?? LogicalTreeHelper.GetParent(child);
// are we at the top of the tree
if (parent == null)
{
return null;
}
MyTabItem parentTabItem = parent as MyTabItem;
if (parentTabItem != null)
{
return parentTabItem;
}
else
{
//use recursion until it reaches the control
return FindParentTabItem(parent);
}
}
К сожалению, это тоже возвращает ноль. Проходя по методу, я вижу, что он находит правильный UserControl
TabItem, но затем, когда он рекурсивно (?) Возвращается через возвращаемые значения, он возвращает это значение в ноль, которое затем возвращается вызывающему методу (в дочернем элементе *). Загруженное событие 1023 *):
MyTabItem tab = FindParentTabItem(this);
Как это исправить, чтобы мой метод правильно возвращал найденное MyTabItem
?