UserControl дочерние элементы управления и FindName
У меня есть Silverlight UserControl, который использует ContentPropertyAttribute, чтобы выставить свойство Children одной из его дочерних панелей. Это позволяет мне добавлять дочерние элементы управления на панель на моей странице:
<local:MyUserControl>
<TextBox Name="tbTest" />
</local:MyUserControl>
Это работает, за исключением того, что поле tbTest на странице присутствует, но не инициализировано. При ближайшем рассмотрении метод InitializeComponent пытается найти TextBox (с FindName), но не может это сделать (возвращает ноль).
После некоторого исследования я обнаружил, что проблема заключается в именных областях - у UserControl есть своя собственная область имен, поэтому его дочерние элементы не могут быть найдены с помощью FindName страницы, но могут быть найдены с помощью метода FindName UserControl.
Как я могу изменить свой UserControl так, чтобы дочерние элементы управления могли быть обнаружены методом InitializeComponent? Стандартные панели (StackPanel, Grid и т. Д.), Похоже, не имеют проблем с этим, поэтому должно быть решение?
Спасибо
1 ответ
Это может быть трудно сделать в этот момент, но наилучшим способом действий, вероятно, будет получение вашего элемента управления из ItemsControl вместо UserControl. Тогда у вас не будет проблем с областями имен.
Я полагаю, что в качестве обходного пути вы можете совершить погружение в элемент управления с помощью VisualTreeHelper, чтобы вручную установить поле tbTest.