我搜索了TextBox
,并且想按向下箭头浏览ListView
,如果我按左/右ListView
上的em>箭头我想用 Caret 导航文本,如果再次按下,我将再次导航ListView
。只是像Chrome搜索建议之类的常规流程。
我只想像按 TAB 按钮那样获得 Focus 。使用TAB,一切都很好。
在TextBox
上,我使用PreviewKeyDown
事件并检测到Key.Down
,然后设置了ListView.Focus()
-效果很好。 ListView
专注,我可以浏览所有项目。
在ListView
上,我使用PreviewKeyDown
事件并检测不是Key.Down
或Key.Up
的任何键,并将焦点放在TextBox
上并将选择设置到最后文字。 -很好。 Textbox
的重点在于,我可以使用向左/向右箭头浏览文本。
如果我按下向下箭头,问题就出现了。什么都没发生。我无法再专注于ListView
。不知道为什么。
我使用了Keyboard.Focus()
,Keyboard.ClearFocus()
,FocusManager
...没有任何帮助,重点放在TextBox
上。
我将ItemContainerGenerator
与SelectedIndex
一起使用,虽然可以,但是选择了ListView
中的第二项。我认为这是因为我选择了第一个索引,并且当我按下ListView
时获得了焦点并传递了 Arrow Down 事件。我以ListView
中的第二行结束。
TextBox
on PreviewKeyDown
:
private void SearchTermTextBox_OnKeyDown(object sender, KeyEventArgs e) {
if (e.Key == Key.Down) {
SuggestionsListView.Focus();
}
else if (e.Key == Key.Escape)
{
SearchTermTextBox.Clear();
}
}
ListView
on PreviewKeyDown
:
private void SuggestionsListView_OnPreviewKeyDown(object sender, KeyEventArgs e) {
if (e.Key != Key.Down && e.Key != Key.Up) {
SearchTermTextBox.Focus();
SearchTermTextBox.Select(SearchTermTextBox.Text.Length, 0);
}
}
我将此代码与ItemContainerGenerator
一起使用。但是,就像我说的那样,出于某种原因选择第二行。
SuggestionsListView.SelectedItem = SuggestionsListView.Items[0];
ListViewItem item = SuggestionsListView.ItemContainerGenerator.ContainerFromItem(SuggestionsListView.SelectedItem) as ListViewItem;
item.Focus();