У меня есть ListBox с DataTemplate, который выглядит следующим образом:Доступ ребенка из ListBoxItem
<ListBox Name="listBox">
<ListBox.ItemTemplate>
<DataTemplate DataType="x:Type local:NumericIconDefinition">
<Grid>
<ComboBox Name="IconComboBox"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я хотел бы принести экземпляр ComboBox in order to manipulate it в коде позади. Я нашел в блоге, что объясняется процесс извлечения в ListBoxItem:
ListBoxItem lbi = (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromIndex(IndexInListBox);
Но я не могу найти хороший способ получить доступ к экземплярам ComboBox сетки, а затем в этом пункте. В идеале, основываясь на приведенном выше коде, я хотел бы сделать что-то вроде этого:
ComboBox cb = (ComboBox)lbi.GetChildByName("IconComboBox");
Я получаю сообщение об ошибке «Эта операция действительна только для элементов, которые применяют этот шаблон». И lbi.IsInitialized, и lbi.isLoaded сообщает true. Является ли сообщение об ошибке вызванным проблемой экземпляра шаблона, о котором вы меня предупреждали? Как я могу убедиться, что он загружен? – Mizipzor
ОК, на самом деле это не ListBoxItem, который вам нужно передать методу FindName, но ContentPresenter, который представляет данные. Вы можете найти пример на странице MSDN метода FindName: http://msdn.microsoft.com/en-us/library/system.windows.frameworktemplate.findname.aspx –
Да, я обнаружил это, когда поиск по Google для некоторых больше информации во второй половине дня. У меня есть короткий фрагмент кода на работе, который я планирую опубликовать здесь завтра. По крайней мере, держать вопрос в качестве личной ссылки. – Mizipzor