#wpf
#wpf
Вопрос:
Для ListView как вы можете сделать так, чтобы вы НЕ могли отменить выбор выбранного индекса, удерживая кнопку управления при выборе любого элемента?
Большое вам спасибо
Ответ №1:
Подпишитесь на событие PreviewMouseButtonDown в ListView. В этом обработчике событий вы можете перехватывать, когда пользователь нажимает ctrl, и отмечать, что событие обработано. Тогда он не будет передан дальше.
Как указала Андреа, они также могут отменить выбор с помощью сочетаний клавиш. Вместо этого я думаю, вам следует подписаться на SelectionChangedEvent. Затем вы можете просмотреть удаленные элементы и отметить их как выбранные:
void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.RemovedItems)
{
myList.SelectedItems.Add(item);
}
}
Комментарии:
1. Этого недостаточно, элемент также может быть выбран с помощью Ctrl Пробел, стилуса или любых других средств.
2. В этом случае, когда будет вызван ваш обработчик событий, возможно, уже были вызваны другие обработчики, зарегистрированные в событии SelectionChanged, и логике приложения придется пострадать.
3. Это правда, вам нужно быть осторожным с этим — хотя на практике у меня не было особых проблем с этим. Если вы действительно хотите быть в безопасности, вам нужно будет написать свой собственный элемент управления списком, который наследуется от Microsoft, и тогда вы сможете обрабатывать события, прежде чем кто-либо другой получит шанс.
4. Просто мысль (5 лет спустя): почему бы не привязать IsEnabled к IsSelected с обратным логическим преобразователем? Один выстрел — одно уничтожение.