我有一个ListBox,上面有一个TextBox。我想使用箭头键从ListBox导航到TextBox。
目的是如果选择了ListBox中的第一项,并且用户按键,则TextBox将获得焦点。
我几乎有这个工作,但问题是当用户键入时,在引发KeyUp事件之前,更改了SelectedItem。这意味着当用户在ListBox中选择了第二个项时,就会发生对TextBox的导航。
如何将keyup事件捕获到ListBox中的第一项?
<StackPanel>
<TextBox Name="TextBox1"></TextBox>
<ListBox Name="ListBox1" KeyUp="ListBox_KeyUp">
<ListBoxItem>a</ListBoxItem>
<ListBoxItem>b</ListBoxItem>
<ListBoxItem>c</ListBoxItem>
</ListBox>
</StackPanel>
private void ListBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up)
{
if (this.ListBox1.SelectedIndex == 0)
this.TextBox1.Focus();
}
}
答案 0 :(得分:3)
假设你真的想要这个,你可以使用PreviewKeyDown
,如下所示:
<StackPanel>
<TextBox Name="textBox1"/>
<ListBox PreviewKeyDown="ListBox_PreviewKeyDown">
<ListBoxItem Content="Item1" />
<ListBoxItem Content="Item2"/>
<ListBoxItem Content="Item3"/>
</ListBox>
</StackPanel>
使用此代码隐藏:
private void ListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (sender is ListBox)
{
var listBox = sender as ListBox;
if (listBox.Items.Count > 0)
{
if (e.Key == Key.Up && listBox.Items.Count > 0 && listBox.SelectedIndex == 0)
{
textBox1.Focus();
e.Handled = true;
}
}
}
}