Доступ к дочернему элементу ListBoxItem
У меня есть ListBox с DataTemplate, который выглядит следующим образом:
<ListBox Name="listBox">
<ListBox.ItemTemplate>
<DataTemplate DataType="x:Type local:NumericIconDefinition">
<Grid>
<ComboBox Name="IconComboBox"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я хотел бы получить экземпляр ComboBox , чтобы манипулировать им в коде позади. Я нашел сообщение в блоге, которое объясняет процесс получения ListBoxItem:
ListBoxItem lbi = (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromIndex(IndexInListBox);
Но я не могу найти хороший способ получить доступ к экземплярам Grid и ComboBox в этом элементе. В идеале, основываясь на приведенном выше коде, я хотел бы сделать что-то вроде этого:
ComboBox cb = (ComboBox)lbi.GetChildByName("IconComboBox");
1 ответ
Решение
Вы можете получить к нему доступ через метод FindName шаблона:
ComboBox cb = (ComboBox)listBox.ItemTemplate.FindName("IconComboBox", lbi);
Обратите внимание, что вы можете сделать это только после полной загрузки ListBoxItem, иначе шаблон еще не будет создан