не удалось перехватить стрелку вниз в выпадающем списке в wpf - PullRequest
1 голос
/ 17 августа 2010

У меня есть поле со списком в окне в wpf, и я пытаюсь захватить клавишу со стрелкой вниз этого списка, но я не могу это сделать.Ниже приведен единственный код, который у меня есть для выпадающего списка.

<ComboBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120"
              PreviewKeyDown="comboBox1_PreviewKeyDown" KeyDown="comboBox1_KeyDown" IsEditable="True"/>

C #

private void comboBox1_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Down)
            MessageBox.Show("hi");
    }

    private void comboBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Down)
            MessageBox.Show("hi");
    }

Событие даже не срабатывает при нажатии клавиши со стрелкой вниз.

Ответы [ 2 ]

2 голосов
/ 17 августа 2010

Попробуйте вместо этого обработать PreviewKeyUp (или KeyUp). Если это не работает, значит, в вашем окне или коде должно быть что-то еще (вы обрабатываете другие экземпляры этих событий)?

0 голосов
/ 11 марта 2019

Создайте новый класс поля со списком, унаследовав его от базового поля со списком. Ниже код объясняет, как. Такие проблемы могут возникнуть при добавлении поля со списком в другой элемент управления, например ячейку сетки данных. Надеюсь, это поможет!

http://csharpquestsolution.blogspot.com/2013/11/arrow-key-events-not-getting-fired-on.html

public class MyComboBox : ComboBox
{
    protected override bool ProcessKeyMessage(ref Message m)
    {
        KeyEventArgs keyArgs = new KeyEventArgs((Keys)m.WParam);
        switch(keyArgs.KeyCode)
        {
            case Keys.Up :
                //Implement your code here.
                return true;
            case Keys.Down :
                //Implement your code here.
                return true;
        }
        return base.ProcessKeyMessage(ref m);
    }
}
...