打开 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 以供参考。您可以尝试在 PopupPopupBorder 元素上订阅这些事件。

您也可以改用我的toolkit 中的AutoCompleteTextBox

【讨论】:

嘿Filip,感谢您的帮助,我已经尝试过您的工具包中的AutoCompleteTextBox,首先非常感谢您的帮助,但就像我的情况一样,即使没有值,我也需要下拉列表文本框,在我的情况下,我无法使用您的工具包实现这一点。还有其他选择吗? 您的意思是替代的自动完成实现吗?我确定有。您也可以从工具包中获取一个并进行更改以使其适合您。【参考方案2】:

尝试将 KeyRoutedEventArgs 更改为 KeyEventArgs 看看你是否开始,因为我们无法看到你的其余代码来查看你是否创建了路由

【讨论】:

您能详细说明一下吗?因为它不会匹配任何重载的 KeyDown 事件,所以我不能只是替换?

以上是关于打开 ComboBox 时 KeyDown 事件不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

EASYUI 1.4版 combobox firefox 下不支持中文检索的问题

EASYUI combobox firefox 下不支持中文检索

当 keydown 打开警报时,Keyup 未触发

如何阻止 WPF KeyDown 事件从某些包含的控件(例如 TextBox)冒泡?

组合框上 KeyDown 的签名

VB.NET如何使控件不能响应KeyDown事件