WPF: получить контроль TextBox на ItemControl
У меня есть привязка ObservableCollection в ItemsControl. В этом ItemsControl создается несколько TextBox, по одному для каждого объекта в ObservableCollection.
Теперь мне нужно выделить текст и выделить его в зависимости от выбранного объекта, но я не могу это сделать.
Мой xaml:
<StackPanel x:Name="stackPanel">
<StackPanel.Children>
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding MyCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding MyContent}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel.Children>
</StackPanel>
И это мой код, который вызывается одним событием:
for (int i = 0; i < this.stackPanel.Children.Count; i++)
{
TextBox t = this.stackPanel.Children[i] as TextBox;
if (t != null)
{
// do selection
}
}
// and also in this way:
for (int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
TextBox t2 = (uiElement as TextBox);
if (t2 != null)
{
// do selection
}
}
Как я могу получить эти текстовые поля? Благодарю.
1 ответ
Следующий код выбирает одно текстовое поле в индексе i
:
ContentPresenter c = (ContentPresenter)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
TextBox t2 = c.ContentTemplate.FindName("textboxName", c) as TextBox;
if (t2 != null)
{
t2.Focus();
t2.SelectAll();
}
Вы должны назвать свое текстовое поле на xaml:
<TextBox x:Name="textboxName" ....
Обратите внимание, что вы не можете фокусировать более 1 элемента за раз, поэтому выделение всех элементов невозможно. Вы должны изменить выделенный цвет текста вручную (через привязку или код)