Пожалуйста, рассмотрим следующий код XAML:Как получить доступ к Сформирован WPF управления после привязки данных
<ListBox Name="listBox1" ItemsSource="{Binding}" >
<ListBox.ItemTemplate>
<DataTemplate>
<Border Name="border1">
<TextBlock Text="{Binding}" />
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
и зададим простой массив к нему:
listBox1.DataContext = new[] { "A", "B", "C" };
Теперь вопрос в том, как мы можем получить доступ генерируемые объекты для границы (или экземпляры TextBlock)?
- Нельзя использовать "border1". Этого не существует.
listBox1.ItemContainerGenerator.ContainerFromIndex(0)
возвращает ListBoxItem, но содержимое этого ListBoxItem имеет тип String.FindName("border1")
возвращает нулевое значение
Update: Что я ожидаю найти в экземпляры Border (и 3 TextBlocks, по одному в каждой границе).
Однако, я просто хотел бы отметить доктор WPF также утверждает, что манипулирование визуальным деревом таким образом редко требуется. Есть гораздо больше «правильных» (надежных и/или устойчивых) способов сделать что угодно. –
К сожалению, это не может быть ответом. То, что я ищу, - это «экземпляры» или «Граница», когда они генерируются не тем, который находится внутри ItemTemplate. Здесь я ожидаю найти «3» объекта типа Border (у меня есть 3 элемента в DataContext) –
@shayan: Прогуливаясь по визуальному дереву, вы получите нужные данные экземпляра. Просто используйте listview как Visual и Border как тип. Но, как предложил Алекс, в целом они лучше подходят. Что вы пытаетесь сделать с границей, когда получаете ее? – mdm20