2012-03-01 6 views
1

Я хочу поймать события MouseDown для всех ячеек объекта DataGrid. Я указал обработчик для него:обработчик не обрабатывает событие

<DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Margin="66,119,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200" ItemsSource="{Binding}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding Path=ID}" /> 
       <DataGridTextColumn Header="Text" Binding="{Binding Path=Text}" /> 
      </DataGrid.Columns> 
      <DataGrid.Resources> 
       <Style TargetType="{x:Type DataGridCell}"> 
        <EventSetter Event="MouseDown" Handler="CellMouseDown" /> 
       </Style> 
      </DataGrid.Resources> 
     </DataGrid> 

Но обработчик события не вызывается. Зачем?

ответ

3

Одна из причин может заключаться в том, что событие обрабатывается внутри DataGridCell, поэтому оно не доходит до вашего обработчика. Вы можете попробовать версию tunneling события PreviewMouseDown.

1

Возможно, ваше мероприятие обработано другим обработчиком, когда он идет к вашему обработчику.

Вот обзор ROUTED событий

3 типа событий:

Bubbling: обработчики событий на источнике событий вызываются. Затем маршрутизированное событие направляется к последовательным родительским элементам до достижения корня дерева элементов . В большинстве маршрутизированных событий используется стратегия барботирования . Переадресация маршрутизации событий обычно используется для сообщения о вводе или изменений состояния от отдельных элементов управления или других элементов пользовательского интерфейса.

Direct: Только исходный элемент имеет возможность вызывать обработчики в ответ. Это аналогично «маршрутизации», которую Windows Forms использует для событий. Однако, в отличие от стандартного события CLR, поддержка прямого маршрутизируемого события поддерживает класс обработки (обработка класса объясняется в следующем разделе) и может использоваться EventSetter и EventTrigger.

Туннелирование: Первоначально обработчики событий у корня элемента дерева вызываются . Затем маршрутизируемое событие перемещает маршрут через последовательные дочерние элементы по маршруту, к элементу узла, который является источником маршрутизируемого события (элемент, который поднял маршрутизируемое событие). Туннельные маршрутизируемые события часто используются или обрабатываются как часть композиции для управления, так что события из составных частей могут быть преднамеренно подавлены или заменены событиями, специфичными для . События ввода, представленные в WPF, часто бывают , реализованные как пара туннелирования/барботажа. События туннелирования также являются , иногда называемыми событиями предварительного просмотра, из-за соглашения об именах , которое используется для этих пар.

Смежные вопросы