Вы можете обработать события 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
элементами (используйте синтаксис -=
).), затем снова прикрепите его после завершения этой операции.
Я бы порекомендовал сделать это таким образом (поскольку вы беспокоитесь о срабатывании события при заполнении списка).Это не помешает пользователям выбирать элементы с помощью клавиш со стрелками вверх и вниз, но если у вас нет действительно веской причины для этого, вы делаете ненужные вещи неудобными (пользователи не хотят, чтобы их произвольно ограничивали в выполнении действий, которыедолжен работать).