2010-10-05 2 views
0

У меня есть конструкция:Как искать родителей?

Grid a = ((((usercontrol.Parent as DockPanel).Parent as ScrollViewer).Parent as Grid) 

Можно ли найти дерево или родительский элемент?

Пример: Сетка а = GetFirstParent (UserControl, "Сетка") Сетка - это тип элемента

+0

Только примечание от вашего дизайна там. оператор «as» возвращает null, если он не может преобразовать. Придание этой особой функции чрезвычайно зависит от визуальной структуры вашего пользовательского элемента управления. Если вы измените его, это, вероятно, вызовет исключение null – Val

ответ

1
Grid a = userControl.FindParent<Grid>(); 

public static T FindParent<T>(this DependencyObject startElement) 
     where T : DependencyObject 
    { 
     DependencyObject parent = GetParentObject(startElement); 
     if (parent == null) 
      return null; 

     T typedParent = parent as T; 
     if (typedParent != null) 
     { 
      return typedParent; 
     } 

     return FindParent<T>(parent); 
    } 
0

Используйте VisualTreeHelper класс.

У него есть метод GetParent, который возвращает родительский элемент элемента управления (действительно, DependencyObject).

Смежные вопросы