我有一个带有自定义组合框的WPF,当用户键入时,它会过滤用户输入的单词(不仅仅是开头)的剩余列表。现在我想按回车键,下拉菜单中的第一项是选定项目。
以下是之前:
所需行为:当我从此处按Enter键时,DHC成为SelectedItem。
实际发生的事情:
HEI成为选定的答案,(可能是因为它是唯一以“HE”开头的节点。
为了解决这个问题,我尝试通过将其包含在xaml中来重载按键功能:
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown" >
<cmd:EventToCommand Command="{Binding KeyPress}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
在代码中路由到此:
private void OnDownPress(KeyEventArgs e)
{
var key = e.Key.ToString().ToLower();
switch (key)
{
case "up":
break;
case "down"
break;
case "return":
SelectedNode = NodeTokenList[0];
UserInput = NodeTokenList[0].FullNodeName;
break;
}
}
现在我尝试在switch语句的返回部分设置一个断点,我必须在触发开关之前按Enter键3次。即便如此,文本框也没有反映出所需的行为
答案 0 :(得分:1)
您可以绑定模型中的选定项目,每次过滤器更改时,您将SelectedItem设置为已过滤列表中的第一项
这将是一种方式,以便我可以使用箭头按钮
导航
如果WPF组合框默认情况下不支持箭头导航,您可以使用命令绑定执行某些操作。
首先绑定__repr__
属性,然后down命令只设置SelectedIndex
(带边界检查ofc)
但我记得键盘导航应该包含在默认SelectedItem = filteredList[SelectedIndex + 1]
中