views:

399

answers:

2

Hi,

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  A: 

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);
    }
}
Gabe
Hi Gabe , Thanks for your suggestion. Now how do I implement it on my page. Do I need to create an UserControl and then add it to my XAMl. Please suggest.
Subhen
You don't need a UserControl. Just use `MyListBox` in place of `ListBox` in your XAML.
Gabe
+1  A: 

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

Veer