Visualização de Eventos
Visualização de eventos, também conhecido como tunelamento de eventos, são eventos roteados onde a rota vem da raiz da aplicação em direção ao elemento que levantou o evento e é reportado como a fonte nos dados do evento. Nem todos os cenários de eventos suportam ou necessitam visualização de eventos; este tópico descreve as situações onde visualização de eventos existem, como aplicações ou componentes devem lidar com elas, e casos onde a criação de visualização de eventos em componentes customizados ou classes pode ser apropriada.
Visualização de Eventos e Entrada
Quando você lida com Visualização de Eventos em geral, seja cauteloso com a marcação de eventos manipulados nos dados do evento. Manipulando a Visualização de eventos ou qualquer outro elemento que não seja o elemento que o levantou (o elemento que é reportado como a fonte nos dados do evento) tem o efeito de não prover a um elemento a oportunidade de lidar com o evento que ele gerou. As vezes este é o resultado desejado, particularmente se os elementos em questão existem nos relacionamentos dentro da composição de um controle.
Para eventos de entrada especificamente, Visualização de eventos também compartilham instâncias de dados de eventos com o evento equivalente. Se você usar um manipulador de classe de Visualização de evento para marcar o evento de entrada manipulado, o manipulador de classe de evento de entrada não será invocado. Ou, se você usar uma instância de manipulador de Visualização de evento para marcar o manipulador de evento, manipuladores para o evento não serão tipicamente invocados. Os manipuladores de classe ou manipuladores de instância podem ser registrados ou anexados com uma opção de serem invocados mesmo se o evento é marcado como manipulado, mas esta técnica não é normalmente utilizada.
Para obter mais informações sobre manipulação de classes e como isto se relaciona com Visualização de eventos consulte Marcando Eventos Roteados como Manipulados e Manipulação de Classes.
Contornando Supressão de Eventos por Controles
Um cenário onde Visualização de eventos são normalmente usadas é na manipulação de eventos de entrada por controles compostos. As vezes, o autor de um controle suprime um certo evento de ser originado em seu controle, talvez com a intenção de substituir um evento definido no componente que carrega mais informações ou implica em um comportamento mais específico. Por exemplo, um Windows Presentation Foundation (WPF) Button suprime MouseLeftButtonDown e MouseLeftButtonDown eventos levantados por Button ou seus elementos compostos em favor da captura de mouse ou levantando um evento Click que é sempre levantado pelo próprio Button . O evento e seus dados continuam pela rota, mas por porque o Button marca os dados do evento como Handled, somente os manipuladores para o evento que foram especificamente indicados que devam agir no caso handledEventsToo são invocados. Se outros elementos na direção da raiz de sua aplicação ainda querem a oportunidade de manipular um evento suprimido por controle, uma alternativa é anexar manipuladores no código em handledEventsToo especificados como true. Mas frequentemente uma técnica mais simples é modificar a direção da rota que você manipula para ser o equivalente de uma Visualização de um evento de entrada. Por exemplo, se um controle suprime MouseLeftButtonDown, ao tentar anexar um manipulador para PreviewMouseLeftButtonDown no lugar. Esta técnica somente funciona para elemento base de evento de entrada como MouseLeftButtonDown. Esses eventos de entrada usam pares túnel/bolha, levantam ambos eventos, e compartilham os dados do evento.
Cada uma dessas técnicas tem tanto efeitos colaterais quanto limitações. O efeito colateral de manipular a Visualização de evento é que manipular o evento naquele ponto pode desabilitar manipuladores que esperam manipular o evento bolha, e portanto a limitação é que usualmente não é uma boa ideia marcar um evento como manipulador enquanto ele ainda está na parte da visualização da rota. A limitação da técnica handledEventsToo é que você não pode especificar um handledEventsToo manipulador em XAML como atributo, você deve registrar o manipulador de evento no código após a obtenção de uma referência do objeto para o elemento onde o manipulador será anexado.
Consulte também
Conceitos
Marcando Eventos Roteados como Manipulados e Manipulação de Classes