Страницы

Поиск по вопросам

воскресенье, 9 июня 2019 г.

Проблема с обработкой клика по Calendar WPF

На форме имеется Calendar, когда в нем выбираю дату, то приходится кликать по любому другому элементу или пустому месту, чтобы остальные элементы стали активны.
То есть после выбора даты, активным остается календарь. Как от этого избавиться? Чтобы не приходилось делать лишний клик?
В разметке нет ничего особенного:

Получается, когда я нажимаю на него и выбираю дату, то курсор двигается, но остальные элементы неактивны (нет даже анимации при наведении на кнопки). Мне приходится делать "пустой" клик, и тогда остальные элементы начинают отвечать.


Ответ

Дело в том, что Calendar предназначен для размещения его во всевозможных всплывающих элементах (например, таких как DatePicker), поэтому он захватывает (Capture) мышь. Такое же поведение можно наблюдать, например, с ComboBox, если открыть выпадающий список, то первый клик мыши будет закрывать его и только следующий будет обработан целевым элементом.
К счастью, это поведение можно изменить таким кодом:
if (Mouse.Captured is CalendarItem) Mouse.Capture(null);
Вставьте его, например, в обработчик PreviewMouseUp вашего календаря.

Комментариев нет:

Отправить комментарий