Событие нажатия Silverlight зарегистрировано во второй раз до завершения первого события - PullRequest
2 голосов
/ 11 июня 2009

У меня есть кнопка, которая запускает «модальное диалоговое окно» - оно просто создает прозрачную сетку, покрывающую все, с «диалоговым окном», созданным поверх этого.

Однако у меня есть странная проблема - если я действительно быстро или дважды нажимаю кнопку (или добавляю некоторую задержку в код события), событие нажатия кнопки выполняется несколько раз, создавая несколько перекрывающихся модальных диалогов. Если первым действием в моем событии является отключение кнопки (IsEnabled = false), это, похоже, предотвращает это.

Я предполагаю, что Silverlight является многопоточным с вводом - он не только записывает второй щелчок в другом потоке (пока выполняется событие нажатия кнопки), но и запускает оружие, оценивая, какой элемент управления должен быть целью до предыдущее событие завершилось. Даже если это событие меняет то, что контролирует эти координаты мыши, это не имеет значения.

Кто-нибудь знает что-нибудь об этом поведении или способе его обойти? Если у меня есть что-то вроде окна сохранения, где пользователь нажимает кнопку сохранения, блокирующая сетка («Сохранение ...») помещается вверх во время сохранения, а затем закрывается все «окно», я бы хотел Избегайте возможности пользователя ставить в очередь несколько кликов событий сохранения (это может привести к непредсказуемому поведению программы).

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Если вы когда-либо работали с WinForms или WPF, это ожидаемое поведение. Ваша кнопка передает свое событие Click, пока ваше модальное диалоговое окно не закроет его. К сожалению, между первым щелчком мыши и тем, как модальное диалоговое окно закрывает кнопку, проходит некоторое время, которое позволяет несколько раз нажать на исходную кнопку.

У вас есть два варианта решения:

  1. Отключить кнопку после первого щелчка, а затем снова включить после возврата модального диалога. Вы уже упоминали, что это работает.

  2. Введите код в обработчик событий кнопки, чтобы определить, отображается ли уже модальное диалоговое окно. Таким образом, вы помещаете ответственность в одно место, а не разделяете ее (отключение и повторное включение кнопки). Это было бы моим предпочтительным решением.

0 голосов
/ 11 июня 2009

Я думаю, что вы видите поведение перенаправленных событий Silverlight .

Вы можете установить для свойства Handled аргументов события значение true, чтобы предотвратить возникновение события.

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