打开 ComboBox 时 KeyDown 事件不起作用?
Posted
技术标签:
【中文标题】打开 ComboBox 时 KeyDown 事件不起作用?【英文标题】:KeyDown event doesn't work when ComboBox is opened? 【发布时间】:2017-01-23 02:49:15 【问题描述】:为什么在打开ComboBox
下拉菜单时没有触发KeyDown
事件?
有什么办法可以触发。
我正在尝试使用KeyDown
事件来检查按下了哪个键并自动从ComboBox
中选择一个项目,该项目以模拟部分自动完成功能的按下字符开头。但是当ComboBox
打开时这不起作用。
代码:
<ComboBox x:Name="statusComboBox" KeyDown="ComboBox_KeyDown"/>
statusComboBox.ItemsSource = inspectionStatusComboList;
private void ComboBox_KeyDown(object sender, KeyRoutedEventArgs e)
ComboBox box = sender as ComboBox;
int index = -1;
string key = e.Key.ToString();
if (key.Length == 1)
switch(box.Name)
case "statusComboBox":
index = inspectionStatusComboList.IndexOf(inspectionStatusComboList.FirstOrDefault(x => x.StartsWith(key)));
break;
box.SelectedIndex = index;
这是我想要实现的目标的剪辑。
【问题讨论】:
显示一些代码,否则很难帮助 @MikaelPuusaari :添加代码。 您是否尝试过捕捉预览事件而不是实际事件? @LordWilmore:预览活动? UIElement.PreviewKeyDown。 msdn.microsoft.com/en-us/library/… 【参考方案1】:我可以想象下拉弹出窗口获得焦点,因此您必须访问它并订阅它的关键事件。请参阅模板here 以供参考。您可以尝试在 Popup
或 PopupBorder
元素上订阅这些事件。
您也可以改用我的toolkit 中的AutoCompleteTextBox
。
【讨论】:
嘿Filip,感谢您的帮助,我已经尝试过您的工具包中的AutoCompleteTextBox,首先非常感谢您的帮助,但就像我的情况一样,即使没有值,我也需要下拉列表文本框,在我的情况下,我无法使用您的工具包实现这一点。还有其他选择吗? 您的意思是替代的自动完成实现吗?我确定有。您也可以从工具包中获取一个并进行更改以使其适合您。【参考方案2】:尝试将 KeyRoutedEventArgs 更改为 KeyEventArgs 看看你是否开始,因为我们无法看到你的其余代码来查看你是否创建了路由
【讨论】:
您能详细说明一下吗?因为它不会匹配任何重载的 KeyDown 事件,所以我不能只是替换?以上是关于打开 ComboBox 时 KeyDown 事件不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
EASYUI 1.4版 combobox firefox 下不支持中文检索的问题
EASYUI combobox firefox 下不支持中文检索