2009-10-12 2 views
0

У меня есть 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"); 

ответ

1

Вы можете получить доступ к нему, хотя методом FindName шаблона:

ComboBox cb = (ComboBox)listBox.ItemTemplate.FindName("IconComboBox", lbi); 

Заметим, что вы можете сделать это только после того, как ListBoxItem будет полностью загружен, в противном случае шаблон еще не будет создан.

+0

Я получаю сообщение об ошибке «Эта операция действительна только для элементов, которые применяют этот шаблон». И lbi.IsInitialized, и lbi.isLoaded сообщает true. Является ли сообщение об ошибке вызванным проблемой экземпляра шаблона, о котором вы меня предупреждали? Как я могу убедиться, что он загружен? – Mizipzor

+0

ОК, на самом деле это не ListBoxItem, который вам нужно передать методу FindName, но ContentPresenter, который представляет данные. Вы можете найти пример на странице MSDN метода FindName: http://msdn.microsoft.com/en-us/library/system.windows.frameworktemplate.findname.aspx –

+1

Да, я обнаружил это, когда поиск по Google для некоторых больше информации во второй половине дня. У меня есть короткий фрагмент кода на работе, который я планирую опубликовать здесь завтра. По крайней мере, держать вопрос в качестве личной ссылки. – Mizipzor

Смежные вопросы