Я пишу приложение со списком, позволяющим множественный выбор (SelectionMode = Multiple); элементы в списке являются ингредиентами для рецепта.
К сожалению, нажатие на элемент списка приводит к выбору этого элемента, который может быть нежелательным. Я хотел бы следующий сценарий:
- пользователь нажимает на список, чтобы выбрать список (сам список, а не элемент)
- пользователь прокручивает до нужного элемента и выбирает его
Я сделал стиль для ListBoxItem, включив в него флажок и ContentPresenter (например, в этом блоге ).
Тем не менее, нажатие на название ингредиента выбирает его.
Поэтому я перехватываю событие MouseDown в текстовом блоке, содержащем имя ингредиента, нахожу базовый ListBoxItem, вызываю для него Focus () и устанавливаю для свойства Handled события значение true.
Теперь элемент списка имеет фокус, но не выбран. Использование клавиш вверх и вниз показывает, что фокус был на правильном элементе.
Моя проблема в том, что пользователь не может видеть, что он нажал на нужный элемент. Пунктирный прямоугольник не отображается на этом элементе.
Вот результат:
А вот что я хотел бы:
Я пытался вызывать частные методы WPF, такие как KeyboardNavigation.ShowFocusVisual, я пытался отправлять нажатия клавиш в список (когда это делается человеком, нажатие правой клавиши курсора или клавиши Alt приводит к появлению пунктирного прямоугольника).
Есть идеи?