我正在使用这种方法来专注于特定的组合框项目。
/// <summary>Combo box focus index.</summary>
private int cbfi = -1;
/// <summary>Focus specified list item based on char match to language name.</summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void onLangComboInput(object sender, TextCompositionEventArgs e) {
var cb = sender as ComboBox;
var ch = e.Text;
var it = cb.findNext<StackPanel, UIElement>(
//...
);
if (it == null) return;
it.Focusable = true;
it.Focus();
Keyboard.Focus(it);
}
该方法在某种意义上说是正确的,它可以正确地聚焦列表中的项目,并且列表可以很好地滚动,但是当我按Enter键时将聚焦项目应用为ComboBox SelectedItem
时,我遇到了问题-聚焦项目以外的其他项目被选中,我不知道为什么。看来键盘焦点设置不正确。
更新
基本上,我有固定的System.Windows.Controls.Combobox
,其中包含约300个自定义视图项的列表。
我希望基本功能跳到在键盘上敲击字符时以扩展列表中的相应字符开头的项目(但我不希望自动选择,只需聚焦并滚动到该元素)。
再说一次。我具有自定义项目视图,该视图通过ListView
添加到Items.Add(mycustomUIElement)
,并且ListView
实例设置为DataContext
的{{1}}。每个视图项都有自己的ComboBox
分配给特定的数据项。并且数据项包含与输入字符进行比较的嵌套字符串属性。另外,如果没有primary on,我还有备用字符串,所以我不能真正使用this question中的内置功能。</ p>
项目搜索和滚动工作正常,但键盘聚焦似乎并不总是有效。就像我按下Enter键,选择了错误的项目或使用箭头键一样,下一个项目也不是目标项目的邻居。