Получение ссылки на объект по имени из DataTemplate

Если у меня есть следующий XAML:

 
        <Инструментарий: DataForm.EditTemplate>
            
                 
            
        
     
Я могу получить ссылку на "форму" this.FindName("форма") из представления.

Как я могу получить ссылку на "стек"? FindName возвращает ноль.

1 ответ

Решение

Проблема здесь в том, что содержание xaml DataTemplate принадлежит другому NameScope, чем внешний Xaml. призвание FindName для элемента выполняется поиск только в NameScope, в котором этот элемент был изначально создан. Отсюда зовет FindName на UserControl не найдет элементы, сгенерированные DataTemplate, Причина этого в том, что DataTemplate (и другие шаблоны) предназначены для многократного повторного использования, использование NameScope устраняет неоднозначность имен.

Решение состоит в том, чтобы вызвать помощь VisualTreeHelperПосмотрите на код в этом блоге для моего взятия на VisualTreeHelper, С VisualTreeEnumeration класс из этого блога добавлен в ваш проект, вы можете сделать это:-

var element = this.Descendents().OfType<FrameworkElement>().FirstOrDefault(fe => fe.Name == "stack");

Конечно, если вы знаете, что "стек" является StackPanel тогда вы можете получить более конкретные с .OfType<T>,

Другие вопросы по тегам