KeyDown event is not working for Arrow keys, Home,

2019-05-31 23:39发布

问题:

I want to override the selection behavior of ListBox Items.

We can traverse through ListBox items using Up and Down arrows but I want to traverse the list using Left and Right arrow keys.

While I am trying to add the key down event for ListBox, It shows almost all key presses except for Arrow Keys, Home, End and similar keys.

I have the following code:

private void listArtist_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    if (e.Key.ToString() == "Enter")
    {
        // Go to some page
    }
    else
    {
        MessageBox.Show(e.Key.ToString());
    }
}

I am clueless about this. Please help.

Thanks, Subhen

回答1:

What you need to do is subclass ListBox and override the OnKeyDown function. Maybe something like this:

class MyListBox : ListBox
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        switch (e.Key)
        {
        case Key.Left:
            // ....
            e.Handled = true;
            break;
        case Key.Right:
            // ....
            e.Handled = true;
            break;
        }

        if (!e.Handled)
            base.OnKeyDown(e);
    }
}


回答2:

Do you mind if i give the idea of handling keyup event instead

http://weblogs.asp.net/jgalloway/archive/2007/07/02/some-keyboard-input-tricks-for-silverlight-1-1-alpha.aspx