обработчик не обрабатывает событие - PullRequest
1 голос
/ 01 марта 2012

Я хочу перехватывать события 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>

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

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

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

1 голос
/ 01 марта 2012

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

Вот обзор Маршрутизируемые события

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

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

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

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

...