UserControl дочерние элементы управления и FindName - PullRequest
3 голосов
/ 31 декабря 2010

У меня есть Silverlight UserControl, который использует ContentPropertyAttribute, чтобы предоставить свойство Children одной из его дочерних панелей. Это позволяет мне добавлять дочерние элементы управления на панель на моей странице:

<local:MyUserControl>
    <TextBox Name="tbTest" />
</local:MyUserControl>

Это работает, кроме поля 'tbTest' страницы, которая присутствует, но не инициализирована. При ближайшем рассмотрении метод InitializeComponent пытается найти TextBox (с FindName), но не может это сделать (возвращает ноль).

После некоторого исследования я обнаружил, что проблема заключается в именных областях - у UserControl есть своя собственная область имен, поэтому его дочерние элементы не могут быть найдены с помощью FindName страницы, но могут быть найдены с помощью метода FindName UserControl.

Как я могу изменить свой UserControl, чтобы дочерние элементы управления могли быть обнаружены методом InitializeComponent? Стандартные панели (StackPanel, Grid и т. Д.), Похоже, не имеют проблем с этим, поэтому должно быть решение?

Спасибо

1 Ответ

1 голос
/ 31 декабря 2010

Это может быть трудно сделать в этот момент, но наилучшим способом действий, вероятно, будет получение вашего контроля из ItemsControl вместо UserControl.Тогда у вас не будет проблем с областями имен.

Я полагаю, что в качестве обходного пути вы можете сделать погружение в элемент управления с помощью VisualTreeHelper, чтобы вручную установить поле tbTest.

...