Доступ к дочернему элементу 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, иначе шаблон еще не будет создан

Другие вопросы по тегам