【发布时间】:2011-06-08 07:46:34
【问题描述】:
我有一个使用 DataTemplate 呈现对象的 ListBox。 DataTemplate 包含一个文本框。当用户在 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();
}
【问题讨论】:
标签: wpf focus datatemplate listboxitem