2

我想有条件地阻止 Enter/Return 键选择 ComboBox 下拉菜单中突出显示的项目。所以我将一个事件处理程序连接到 ComboBox.PreviewKeyDown 以便我可以设置 Handled 属性,但永远不会输入事件处理程序。当我使用 Snoop 观看事件时,会为其他键触发 PreviewKeyDown 事件,但当我按下返回键时它不会触发;甚至不在窗口级别。为什么事件没有触发?

编辑:组合框需要是可编辑的(IsEditable=true)。然后打开下拉列表。开始在您的列表中输入一个项目,它应该为您选择它。按返回键。

4

2 回答 2

0

尝试这个

// prevent selecting an item when a comboboxitem is highlighted
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
    if (e.Key == System.Windows.Input.Key.Enter || e.Key == System.Windows.Input.Key.Return)
    {
        e.Handled = true;
    }
    else
    {
        //if (base.IsDropDownOpen == false)
        //{
        //  base.IsDropDownOpen = true;
        //}
    }

    //base.OnPreviewKeyDown(e);
}
于 2013-02-27T00:51:34.857 回答
0

这是因为当下拉菜单打开并按下回车键时,WPF 会在内部处理该事件。这是默认的 WPF 行为。

要解决此问题,请扩展 ComboBox 并覆盖 OnPreviewKeyDown 方法。

public class MyComboBox : ComboBox
{
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        bool isDropDownOpen = IsDropDownOpen;

        base.OnPreviewKeyDown(e);

        if (isDropDownOpen)
        {
            e.Handled = false;
        }
    }
}
于 2021-11-27T10:06:13.263 回答