Шаблон ListBox содержит несколько элементов, как их получить в коде?
Имеется ListBox с шаблоном: для каждого элемента два textblock и один textbox.
Как в коде получить текст textblock и textbox?
Не знаю, как обратится в цикле к каждому элементу ListBox. Если как обычно обращться по имени к textblock, то не получается - "имя не существует в данном контексте".
<ListBox DataContext="{Binding ElementName=cBoxGroup, Path=SelectedItem}"
ItemsSource="{Binding Path = Atlets}" x:Name="lbnewResult" >
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="150"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbLast_Name" Grid.Column ="0" Text="{Binding Path = Last_Name}" HorizontalAlignment="Left"/>
<TextBlock Grid.Column ="1" Text="{Binding Path = First_Name}" HorizontalAlignment="Left"/>
<TextBox Grid.Column ="2" x:Name ="tbResult" Background="Aqua"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Ответы (1 шт):
Автор решения: default locale
→ Ссылка
Об этом есть статья на MSDN: How to: Find DataTemplate-Generated Elements
//Начинаем с элемента ListBox. В примере используется текущий элемент,
//Вы будете обходить элементы в списке
ListBoxItem myListBoxItem =
(ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem(myListBox.Items.CurrentItem));
// Для элемента получаем ContentPresenter
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(myListBoxItem);
// Шаблон данных
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
//И уже из него по имени вытаскиваем TextBlock
TextBlock myTextBlock = (TextBlock)myDataTemplate.FindName("tbLast_Name", myContentPresenter);