Seguindo o nosso aprendizado sobre os componentes que compoe a arquitetura WPF, hoje falaremos dos eventos roteado. Eventos roteados, são um tipo de evento que ocorre dentro de um programa wpf, talvez você esteja curioso, em saber o que diferencia um evento roteado, de um evento comum na plataforma .NET, ´mais logo ficará esclarecido esta dúvida. Observe o código XAML abaixo:
 
 

Que dá origem a tela abaixo:

 

     Note que o código XAML que dá origem a tela, tem o que chamamos de árvore lógica que é a hierárquia em que os elementos são declarados. Um objeto Grid contém o objeto button, que por sua vez contém um StackPanel e assim por diante. Sendo que a árvore lógica, se expande para a árvore visual, em que podemos ter mais objetos, e que muitas das vezes, são objetos não visuais, como mostra a figura abaixo:

 

 

    Veja que a árvore visual pode assumir várias ramificações, e que nas mesmas, existem objetos que não são visuais mais pertencem a árvore visual, é ai que começaremos a entender o por que dos eventos roteados. Por que o que vemos declarado no XAML, não é o que objtemos em tempo de execução.
     Utilizando a ferramenta snoop( que pode ser baixada aqui ), consigo ver toda a árvore visual que obtenho em tempo de execução. Então começamos a entender que, quando clico no botão, posso não estar clicando no OBJETO Button, posso estar clicando em um objeto ButtonChrome ou no OBJETO Image por exemplo.  Ainda que o clique não tenha sido no objeto Button, ele precisa ser traduzido em um clique do botão e é ai que entra o roteamento de eventos.
 
Roteamento de Eventos
     Entender a árvore visual, é imprescindível, pois o roteamento de ventos é feito com base principalmente na árvore visual. Eventos roteados suportam um RountingStrategy, que pode ser Bubble, Tunel ou Direct.

Bubble: É o mais comum, significa que o evento irá se propagar do elemento de origem, até que seja manipulado ou até que alcance o elemento raiz, ou seja, do nivel mais inferior da hierárquia até o primeiro nivel. Eventos buble geralmente tem o nome que indica a sua ação, por exemplo MouseDown. Veja a figura abaixo:

 

 

   A figura acima indica a direção, na qual um evento buble se propaga.
 

Tunnel: Este tipo de evento vai na outra direção, ou seja, do elemento raiz até o último elemento dentro da hierárquia até que seja manipulado ou atinjam o elemento de origem do evento. Isto permite que elementos ascendentes interceptem o evento e o manipulem antes que atinjam o elemento de origem. Evento Tunnel são prefixador com a palavra Preview por conveção. Exemplo: PreviewMousedown. Veja a figura abaixo:

 

 

Direct: Eventos direct são iguais a eventos do .NET normais.

 

OBS: Quando um evento é determinado como tunnel, existem também um evento bubble correspondente. O que o evento bubble faz é ir na direção do elemento mais baixo até a raiz, fazendo assim o trajeto inverso, procurando um manipulador para o evento; o fato é que se você quer parar o processo de bubbling ou tunneling você deve deve apenas adicionar um manipulador para o evento, mais indicar que o mesmo, já foi tratado. Você pode fazer isto dentro do manipulador do evento, como o exemplo de código abaixo mostra:

 

private void OnChildElementMouseDown(object sender,

  MouseButtonEventArgs e) {

  e.Handled = true;

}

 

Eventos anexados

     Eventos anexados, permitem que você declare um evento em um elemento cujo tipo não é o de origem do evento, ou seja, um elemento diferente. Eventos anexados, permitem a flexibilidade de onde e como você irá conectar seus eventos. Se você por exemplo, deseja que um objeto grid manipule um evento do tipo Button,Click, basta apenas declarar da seguinte maneira:

<Grid Button.Click="myButton_Click">

  <Button Name="myButton" >Click Me</Button>

</Grid>

 

        Bom pessoal aprendemos mais uma parte importante dentro da arquitetura WPF. Compreender como cada parte da arquitetura funciona, é importante para saber utilizar e extrair todos os benefícios da tecnologia. Espero que tenham gostado do artigo e que eu possa ter contribuido, para o aprendizado de vocês, um abraço e até a próxima.