У меня есть ListBox, который представляет объекты с использованием DataTemplate. DataTemplate содержит TextBox. Когда пользователь выбирает элемент в ListBox, я хотел бы установить фокус на TextBox для выбранного элемента.
Мне удалось частично добиться этого, обработав ListBox.SelectionChanged, но он работает только тогда, когда пользователь нажимает на ListBox, чтобы выбрать элемент - он не работает, если пользователь вкладывает в ListBox и использует клавиши со стрелками для выбора элемента , хотя TextBox.Focus () вызывается .
Как установить фокус на TextBox, когда пользователь использует клавиатуру для выбора элемента?
Вот разметка для ListBox:
<ListBox Name="lb1" SelectionChanged="ListBox_SelectionChanged" ItemsSource="{Binding Items}" >
<ListBox.ItemTemplate>
<DataTemplate >
<TextBox></TextBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Вот код обработки:
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBoxItem lbi = (ListBoxItem)this.lb1.ItemContainerGenerator.ContainerFromItem(this.lb1.SelectedItem);
Visual v = GetDescendantByType<TextBox>(lbi);
TextBox tb = (TextBox)v;
tb.Focus();
}