Элемент управления Silverlight Tab, FindName не всегда работает должным образом
У меня есть пользовательский элемент управления Silverlight, который "привязан" к объекту Document. класс документа содержит массив объектов Field. Предполагается, что когда элемент управления связан с документом, каждое поле в документе связано с элементом управления в пользовательском элементе управления. Каждое поле имеет имя, а элемент управления в пользовательском элементе управления, который должен быть связан с этим полем, имеет то же имя (поэтому, если поле называется "FirstName", в пользовательском элементе управления будет текстовое поле с x:Name="Имя"). Чтобы определить, какой элемент управления должен быть привязан к какому полю, я использовал следующий код:
private void BindDocumentToUserControl(Document document)
{
foreach (Field field in document.Fields)
{
Control c = this.FindName(field.Name);
if (c != null)
{
//bind control to field...
}
}
}
все это работает нормально, пока я не попытаюсь поместить элементы управления в элемент управления с вкладками. когда пользовательский элемент управления загружается впервые (а пользователь не изменил выбранную вкладку самостоятельно), тогда вышеуказанный метод находит все элементы управления. однако, если пользователь изменяет выбранную вкладку и затем повторно привязывает элемент управления, this.FindName найдет только те элементы управления, которые находятся на выбранной вкладке. если я передам имя элемента управления на другой вкладке, которая, как я знаю, верна, он все равно вернет значение null.
я нашел статью ниже относительно той же самой проблемы, однако решение действительно не подходит для того, что я пытаюсь сделать. любая помощь будет принята с благодарностью
1 ответ
Как небольшой взлом ответа, не могли бы вы загрузить элементы управления для каждой вкладки в скрытую панель, по одной вкладке за раз, а затем, когда элементы управления были загружены, переместить их обратно во вкладку?
Я не могу сказать, что это определенно работает, но это звучит "логично", если немного грязного хака....