Аргументы события - должны ли они отражать моментальные снимки состояния в момент события или данные в реальном времени? - PullRequest
2 голосов
/ 09 июля 2010

Похоже, что объект args, переданный в переопределение OnPreviewMouseLeftButtonDown, описывает текущее (живое) состояние кнопки мыши, а не снимок состояния, присутствующего при возникновении события.

Это правильное поведение? Разве аргументы события не должны отражать данные события в момент возникновения события (моментальный снимок) и не должны автоматически обновляться для отражения текущих данных?

Спасибо,
Ben

<ч />

Пример кода

protected override void OnPreviewMouseLeftButtonDown(MouseButtonEventArgs e)
{
   // before MessageBox display, e.ButtonState = Pressed
   MessageBox.Show("OnPreviewMouseLeftButtonDown");

   // now, e.ButtonState = Released 
   base.OnPreviewMouseLeftButtonDown(e);
}

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Я выяснил, почему значение e.ButtonState изменяется в обработчике событий - каждый раз, когда к этому свойству обращаются, вызывается базовый MouseDevice, который возвращает текущее (живое) состояние кнопки против состояния, которое существовало в момент, когда произошло событие. (Спасибо Бобу Бао из Microsoft за то, что указал на это .)

Я писал об этом в http://bengribaudo.com/blog/2010/07/26/38/event-arguments-static-snapshots.

0 голосов
/ 09 июля 2010

Любые экземпляры класса EventArgs не гарантируют поточно-ориентированность.Поэтому я думаю, что мы не можем жаловаться, если внутреннее состояние аргумента изменяется;)

...