Visual Basic e manipulação de eventos WPF

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

Usando "manipuladores" em um aplicativo WPF

Os manipuladores de eventos que estão conectados às instâncias e aos eventos com Handles devem ser definidos na declaração de classe parcial da instância, que também é um requisito para os manipuladores de eventos que são atribuídos por meio de valores de atributos nos elementos. Você só pode especificar Handles para um elemento na página que tenha um valor de Name propriedade (ou x:Name Directive declarado). Isso ocorre porque o Name XAML in cria a referência de instância necessária para dar suporte ao formato de referência Instance.Event exigido pela Handles sintaxe. O único elemento que pode ser usado sem Handles uma Name referência é a instância do elemento raiz que define a classe parcial.

Você pode atribuir o mesmo manipulador para vários elementos, separando as referências Instance.Event depois de Handles com vírgulas.

Você pode usar Handles para atribuir mais de um manipulador à mesma referência Instance.Event. Não atribua nenhuma importância para a ordem na qual os manipuladores são fornecidos na referência Handles. Você deve presumir que os manipuladores que operam o mesmo evento podem ser invocados em qualquer ordem.

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

Você pode usar Handles para anexar manipuladores em eventos roteados, desde que anexe os manipuladores às instâncias que definem o evento que está sendo manipulado nas suas tabelas de membros. Para eventos roteados, os manipuladores anexados seguem Handles as mesmas regras de roteamento que os manipuladores anexados como atributos XAML ou com a assinatura comum do AddHandler. Isso significa que, se o evento já estiver marcado como manipulado (a propriedade nos dados do evento é True), os manipuladores anexados com Handles não serão invocados em resposta a Handled essa instância de evento. O evento poderia ser marcado como manipulado pelos manipuladores de instância em outro elemento da rota, ou pela manipulação de classe no elemento atual ou nos elementos anteriores ao longo da rota. Nos eventos de entrada que dão suporte ao túnel emparelhado/eventos de bolha, a rota de túnel pode ter marcado o par de eventos manipulado. Para obter mais informações sobre os eventos roteados, consulte Visão geral de eventos roteados.

Limitações de "Identificadores" para adicionar manipuladores

Os Handles não podem referenciar manipuladores para eventos anexados. Você deve usar o add método accessor para esse evento anexado ou atributos de evento typename.eventname em XAML. Para obter os detalhes, consulte Routed Events Overview (Visão geral dos eventos roteados).

Para eventos roteados, você só pode usar Handles para atribuir manipuladores nas instâncias em que esse evento existir na tabela de membros da instância. No entanto, nos eventos roteados em geral, um elemento pai poderá ser um ouvinte para um evento 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 essa opção por meio de um formulário de atributos typename.membername, que qualifica qual tipo realmente define o evento que você deseja manipular. Por exemplo, um pai Page (sem Click evento definido) pode escutar eventos de clique de botão atribuindo um manipulador de atributos no formato Button.Click. No entanto, Handles não dá suporte ao formulário typename.membername, uma vez que ele deve dar suporte a um formulário Instance.Event conflitante. Para obter os detalhes, consulte Routed Events Overview (Visão geral dos eventos roteados).

Os Handles não podem anexar manipuladores que são invocados para eventos que já estão marcados como manipulados. Em vez disso, você deve usar o código e chamar a handledEventsToo sobrecarga de AddHandler(RoutedEvent, Delegate, Boolean).

Observação

Não use a Handles sintaxe no código do Visual Basic quando você especificar um manipulador de eventos para o mesmo evento em XAML. Nesse caso, o manipulador de eventos é chamado duas vezes.

Como o WPF implementa a funcionalidade "Identificadores"

Quando uma página XAML (Extensible Application Markup Language) é compilada, o arquivo intermediário declara FriendWithEvents referências a cada elemento na página que tem um conjunto de Name propriedades (ou x:Name Directive declarado). Cada instância nomeada é potencialmente um elemento que pode ser atribuído a um manipulador por meio de Handles.

Observação

No Visual Studio, o IntelliSense pode mostrar a conclusão de quais elementos estão disponíveis para referência Handles em uma página. No entanto, isso pode fazer com que uma compilação seja transmitida, de modo que o arquivo intermediário possa preencher todas as referências Friends.

Confira também