WPF ListViewItem焦点选择第二行

时间:2019-02-26 12:53:04

标签: c# .net wpf listview

我搜索了TextBox,并且想按向下箭头浏览ListView,如果我按左/右ListView上的em>箭头我想用 Caret 导航文本,如果再次按下,我将再次导航ListView。只是像Chrome搜索建议之类的常规流程。

我只想像按 TAB 按钮那样获得 Focus 。使用TAB,一切都很好。

TextBox上,我使用PreviewKeyDown事件并检测到Key.Down,然后设置了ListView.Focus()-效果很好。 ListView专注,我可以浏览所有项目。

ListView上,我使用PreviewKeyDown事件并检测不是Key.DownKey.Up的任何键,并将焦点放在TextBox上并将选择设置到最后文字。 -很好。 Textbox的重点在于,我可以使用向左/向右箭头浏览文本。

如果我按下向下箭头,问题就出现了。什么都没发生。我无法再专注于ListView。不知道为什么。

我使用了Keyboard.Focus()Keyboard.ClearFocus()FocusManager ...没有任何帮助,重点放在TextBox上。

我将ItemContainerGeneratorSelectedIndex一起使用,虽然可以,但是选择了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();

0 个答案:

没有答案