Выберите элемент ListBox только при нажатии или вводе ключа в Silverlight - PullRequest
5 голосов
/ 17 июня 2011

Когда я заполняю ListBox службами RIA, элемент выбирается автоматически.Это вызывает событие SelectionChanged.Если я перемещаю выделение вверх или вниз с помощью клавиш со стрелками, событие также запускается.

Я не хочу этого.Я хочу, чтобы пользователь нажал клавишу ввода или щелкнул элемент для его выбора.Как мне это сделать?

1 Ответ

4 голосов
/ 17 июня 2011

Вы можете обработать события MouseLeftButtonDown и KeyDown для ListBox.Для события KeyDown вам нужно проверить EventArgs, чтобы определить, была ли нажата клавиша Enter (в отличие от любой другой клавиши).

Эти события могут возникать, даже если элемент не выбран (например, если пользователь щелкает внутри ListBox, но не над фактическим элементом), поэтому в ваших обработчиках событий вы должны проверить это.

Ваши обработчики событий могут выглядеть примерно так:

public void MyListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
   ItemSelected();
}

public void MyListBox_KeyDown(object sender, KeyEventArgs e)
{
   if ((e.Key & Key.Enter) == Key.Enter)
   {
      ItemSelected();
   }
}

public void ItemSelected()
{
   if (MyListBox.SelectedItem != null)
   { 
      // Handle item selection here
   } 
}

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


Другой способ сделать это - просто удалить обработчик события SelectionChanged при заполнении элементов ListBox элементами (используйте синтаксис -=).), затем снова прикрепите его после завершения этой операции.

Я бы порекомендовал сделать это таким образом (поскольку вы беспокоитесь о срабатывании события при заполнении списка).Это не помешает пользователям выбирать элементы с помощью клавиш со стрелками вверх и вниз, но если у вас нет действительно веской причины для этого, вы делаете ненужные вещи неудобными (пользователи не хотят, чтобы их произвольно ограничивали в выполнении действий, которыедолжен работать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...