Событие KeyDown не работает для клавиш со стрелками, Home, End, PageUp, PageDown и других подобных клавиш в silverlight - PullRequest
1 голос
/ 26 марта 2010

Я хочу переопределить поведение выбора элементов ListBox.

Мы можем перемещаться по элементам ListBox, используя стрелки вверх и вниз, но я хочу пройти по списку, используя клавиши со стрелками влево и вправо.

Когда я пытаюсь добавить событие нажатия клавиши для ListBox, оно показывает почти все нажатия клавиш, кроме клавиш со стрелками, Home, End и аналогичных клавиш.

У меня есть следующий код:

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());
    }
}

Я ничего не понимаю об этом. Пожалуйста, помогите.

Спасибо, Subhen

Ответы [ 2 ]

4 голосов
/ 26 марта 2010

Что вам нужно сделать, это создать подкласс ListBox и переопределить функцию OnKeyDown. Может быть, что-то вроде этого:

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);
    }
}
1 голос
/ 26 марта 2010

Вы не возражаете, если я дам идею обработки события keyup вместо этого

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

...