Кнопка не отвечает с календарем .Net 4 (ошибка?) - PullRequest
2 голосов
/ 14 декабря 2011

Я нахожусь на последних этапах проекта, и у меня есть экран с (настроенным .net4) календарем и (снова настраиваемой) кнопкой.

всякий раз, когда выбирается дата, кнопка становится неактивной, он не будет переключаться в визуальное состояние при наведении и не регистрирует первый щелчок.Однако, если щелкнуть по нему, он снова станет обычной кнопкой, запускает команды, переключает визуальное состояние и т. Д., По крайней мере, до тех пор, пока вы не передумаете о дате снова.между календарем и кнопкой или чем-то похожим был фокус, правда, я не слишком разбираюсь в фокусе WPF, но пока не нашел поддержки теории.

Мне удалось повторить это с (проверено в kaxaml):

  <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
    <Calendar />
    <Button>Hello, world!</Button>
  </StackPanel>

и то же самое с календарем WPF Toolkit (февраль 2010) ..

РЕДАКТИРОВАТЬ: Я забыл упомянуть, хотя я тестирую с кнопками, я не нашел элемент пользовательского интерфейса, с которым он не работает, выбор calendarDayButton даже сделает пользовательский интерфейс Kaxamls бездействующим.*

1 Ответ

4 голосов
/ 14 декабря 2011

Появляется элемент управления Calendar для захвата мыши при нажатии. Вы можете избавиться от этого поведения, освободив захват мыши в событии GotMouseCapture.

Не знаю, каковы побочные эффекты от этого, но код для выпуска захвата выглядит так:

private void Calendar_GotMouseCapture(object sender, MouseEventArgs e)
{
    if (e.OriginalSource is CalendarItem)
        Mouse.Capture(null);
}

Редактировать

Проверялось, почему при отпускании мыши навигация перестала работать, и после некоторого тестирования обнаружилось, что нажатие определенных элементов в Календаре захватывает фокус, а другие - нет. Предметы, которые крадут мышь, всегда имеют e.OriginalSource из System.Windows.Controls.Primitives.CalendarItem, поэтому добавлена ​​проверка, чтобы разблокировать захват мыши, только если e.OriginalSource имеет тип CalendarItem

...