Share via


Visual Basic and WPF Event Handling

Para a linguagem Microsoft Visual Basic .NET especificamente, você pode usar a palavra-chave específica da linguagem Handles para associar tratadores de eventos com instâncias, em vez de anexar os tratadores de eventos com atributos ou usando o método AddHandler. No entanto, a técnica Handles para anexar tratadores a instâncias tem algumas limitações, porque a sintaxe Handles não oferece suporte a alguns recursos específicos de rotemento de eventos do sistema de eventos WPF.

Usando "Handles" em um aplicativo WPF

Todos os tratadores de eventos conectados a instâncias e eventos com Handles devem ser definidos dentro da declaração de classe parcial da instância, que também é um requisito para tratadores de eventos que são atribuídos através de valores de atributos em elementos. Você pode especificar Handles somente para um elemento na página que tenha um valor da propriedade Name (ou x:Name Attribute declarado). Isso ocorre porque o Name em XAML cria a referência de instância que é necessária oferecer suporte ao formato de referência Instance.Event exigido pela sintaxe Handles. O único elemento que pode ser usado para Handles sem uma referência Name é a instância no elemento-raiz que define a classe parcial.

Você pode atribuir o mesmo tratador para vários elementos separando referências Instance.Event após Handles com vírgulas.

Você pode usar Handles para atribuir mais de um tratador à mesma referência Instance.Event. Não atribua qualquer importância para a ordem na qual tratadores são fornecidos na referência Handles; você deve presumir que tratadores que tratam o mesmo evento podem ser chamados em qualquer ordem.

Para remover um tratador que foi adicionado com Handles na declaração, você pode chamar RemoveHandler.

Você pode usar Handles para anexar tratadores para eventos roteados, desde que você anexe tratadores a instâncias que definem o evento que está sendo tratado nas suas tabelas de membros. Para eventos roteados, tratadores que estão anexados com Handles seguem as mesmas regras de roteamento que os tratadores que estão anexados como atributos XAML, ou com a assinatura comum de AddHandler. Isso significa que se o evento já estiver marcado como tratado (a propriedade Handled nos dados de evento for True), então tratadores anexados com Handles não serão invocados em resposta a essa instância do evento. O evento pode ser marcado como tratado por tratadores de instância em outro elemento da rota, ou por tratamento de classe tanto no elemento atual quanto nos elementos anteriores da rota. Para eventos de entrada que suportam eventos tunelados/bolheados em pares, a rota de tunelamento pode ter marcado o par de eventos como tratado. For more information about routed events, see Visão geral sobre eventos roteados.

Limitações de "Handles" para adicionar tratadores

Handles não pode fazer referência a tratadores para eventos anexados. Você deve usar o método acessador add para aquele evento anexado, ou atributos de evento typename.eventname em XAML. Para obter detalhes, consulte:Visão geral sobre eventos roteados.

Para eventos roteados, você só pode usar Handles para atribuir tratadores a instâncias onde esse evento existe na tabela de membros da instância. No entanto, com eventos roteados em geral, um elemento-pai pode ser um ouvinte para um evento vindo de elementos-filho, mesmo se o elemento-pai não tiver esse evento em sua tabela de membros. Na sintaxe de atributo, você pode especificar isso por meio de uma forma de atributo typename.membername que qualifica qual tipo realmente define o evento que você deseja tratar. Por exemplo, um pai Page (sem nenhum evento Click definido) pode escutar eventos de botão pressionado ao atribuir um tratador de atributo na forma Button.Click. Mas Handles não tem suporte para a forma typename.membername, porque deve suportar uma forma Instance.Event conflitante. Para obter detalhes, consulte:Visão geral sobre eventos roteados.

Handles não pode anexar tratadores que são chamados para eventos já marcados como tratados. Em vez disso, você deve usar código e chamar a sobrecarga handledEventsToo de AddHandler(RoutedEvent, Delegate, Boolean).

Como o WPF implementa a funcionalidade "Handles"

Quando uma página Extensible Application Markup Language (XAML) é compilada, o arquivo intermediário declara referências Friend WithEvents para cada elemento na página que tem uma propriedade Name definida (ou x:Name Attribute declarado). Cada instância nomeada é potencialmente um elemento ao qual pode ser atribuído um tratador através de Handles.

ObservaçãoObservação:

Dentro de Microsoft Visual Studio, IntelliSense pode mostrar conclusão para os quais elementos estão disponível para um Handles referência em uma página. No entanto, isso pode levar uma passagem de compilação para que o arquivo intermediário possa preencher todas as referências Friends.

Consulte também

Conceitos

Marcando Eventos Roteados como Manipulados e Manipulação de Classes

Visão geral sobre eventos roteados

XAML Overview

Referência

AddHandler