программно выбрать следующий элемент списка - PullRequest
4 голосов
/ 28 июля 2010

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

private void mainlistup(object sender, System.Windows.RoutedEventArgs e)
{
    if (listBox_Copy.SelectedIndex != -1 &&
        listBox_Copy.SelectedIndex < listBox_Copy.Items.Count &&
        listBox_Copy.SelectedIndex !=1)
    {
        listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex - 1;
    }
}

private void mainlistdown(object sender, System.Windows.RoutedEventArgs e)
{
    if (listBox_Copy.SelectedIndex < listBox_Copy.Items.Count &&
       listBox_Copy.SelectedIndex != -1)
    {
        listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex + 1;
    }
}

Однако это работает, когда при нажатии кнопки элемент теряет свой выбор ... Индекс выбора установлен правильно (другие элементы с привязкой к данным, связанные с выбранным элементом, показывают правильные значения), но элемент списка больше не выделяется. Как мне сделать выбранный элемент выделенным?

Ответы [ 2 ]

5 голосов
/ 28 июля 2010

Ваш ListBox, вероятно, только что потерял фокус.Просто сделайте следующее после установки SelectedIndex:

listBox_Copy.Focus();
2 голосов
/ 28 июля 2010

Как говорит GenericTypeTea, похоже, что это связано с потерей фокуса.Другая проблема, однако, заключается в том, что ваш код слишком сложен и не позволит вам перейти к пункту вверху.Я бы предложил изменить его на что-то вроде:

Переместить вверх

if (listBox_Copy.SelectedIndex > 0)
{ 
     listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex - 1; 
}

Переместить вниз

if (listBox_Copy.SelectedIndex < listBox_Copy.Items.Count - 1)
{
     listBox_Copy.SelectedIndex = listBox_Copy.SelectedIndex + 1;
}            
...