Выберите элемент с не сфокусированным списком - PullRequest
0 голосов
/ 12 августа 2011

Я разрабатываю приложение с wpf, в котором текстовое поле всегда фокусируется, в то время как все остальные элементы управления никогда не фокусируются, для достижения этого я установил свойство IsFocusable = false для всех элементов управления. Одним из этих элементов управления является ListBox, и если я устанавливаю свойство IsFocusable = false, элементы ListBox становятся недоступными для выбора, но мне нужно иметь возможность выбирать эти элементы.

Решения, которые я нашел, не очень элегантны и чисты. Одним из решений является использование ItemControl со стилизованным RadioButton в качестве элементов, а затем привязка события щелчка RadioButton с помощью некоторых методов в моей модели представления Другое решение состоит в том, чтобы использовать прикрепленное поведение для захвата события нажатия мыши в ListBox, затем найти, какой элемент расположен в координатах мыши, и затем попытаться установить этот элемент в качестве выбранного элемента, но если я просто установлю свойство SelectedItem из ничего не происходит в привязанном поведении.

Существует ли более элегантный и эффективный способ сделать элементы не сфокусированного списка ListBox доступными для выбора?

Edit: Другое возможное решение - зарегистрировать обработчик класса для события donw левой кнопки мыши, используя EventManager:

EventManager.RegisterClassHandler(typeof(ListBoxItem),
ListBoxItem.MouseLeftButtonDownEvent,
    new RoutedEventHandler((s, o) =>
        { (s as ListBoxItem).IsSelected = true; }));

Обработчики классов вызываются перед любыми другими обработчиками событий и для всех элементов управления указанного типа (в данном случае ListBoxItem) во всем приложении

Это лучшее решение, которое я нашел с тех пор

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