Получите RoutedEvent Source как внук обработчика - PullRequest
0 голосов
/ 11 октября 2011

Я обрабатываю пользовательский ввод в приложении WPF, работаю с RoutedEvents, таким как MouseDown, MouseMove и т. Д. Я получил хорошее представление о туннелировании и пузырях из Обзор маршрутизируемых событий MSDN , но я столкнулся с проблемой пузырьковых событий.

Поскольку событие MouseDown всплывает до обработчика, MouseButtonEventArgs.Source дает мне дочерний элемент текущего элемента, из которого произошло событие.Есть ли способ завладеть дочерним элементом этого элемента?Я думаю, что-то вроде MouseButtonEventArgs.Source.Source

В этом случае я хотел бы поместить свою обработку ввода как можно выше в мое приложение, но все же получить информацию о начальном элементе, к которому пришло событиеот.

Пример ниже: здесь нажата Grid с именем Grandchild, и я хотел бы обработать событие в Parent_MouseDown().Однако в этом случае вся информация об источнике события, которую я получаю, касается grid с именем Child.Есть ли способ получить информацию о Grandchild от Parent?

<Grid x:Name="Parent" MouseDown="Parent_MouseDown">
    <Grid x:Name="Child" MouseDown="Child_MouseDown">
        <Grid x:Name="Grandchild" MouseDown="Grandchild_MouseDown">
        </Grid>
    </Grid>
</Grid>

Обратите внимание, что этот пример упрощен, так как в моем приложении эти элементы относятся к разным классам и находятся в разных файлах.Заранее спасибо!

1 Ответ

2 голосов
/ 11 октября 2011

Попробуйте MouseButtonEventArgs.OriginalSource Он всегда указывает на исходный источник, из которого произошло событие.

...