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 элемента за раз, поэтому выделение всех элементов невозможно. Вы должны изменить выделенный цвет текста вручную (через привязку или код)

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