我有一个ListBox,使用DataTemplate呈现对象。DataTemplate包含一个TextBox。当用户选择ListBox中的项目时,我想将焦点设置到所选项目的TextBox上。
通过处理ListBox.SelectionChanged事件,我已经能够部分实现此目标,但仅在用户单击ListBox以选择项目时才有效 - 即使TextBox.Focus()被调用,如果用户使用箭头键从键盘选择项目,则不起作用。
当用户使用键盘选择项目时,我该如何将焦点设置到TextBox上?
以下是ListBox的标记:
通过处理ListBox.SelectionChanged事件,我已经能够部分实现此目标,但仅在用户单击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();
}