Control de eventos en Visual Basic y WPF
Actualización: noviembre 2007
En concreto para el lenguaje Microsoft Visual Basic .NET, puede utilizar la palabra clave Handles específica del lenguaje para asociar controladores de eventos a instancias, en lugar de asociar controladores de eventos a atributos o de utilizar el método AddHandler. Sin embargo, la técnica de Handles para asociar controladores a instancias tiene algunas limitaciones, porque la sintaxis de Handles no puede admitir algunas de las características específicas de evento enrutado del sistema de eventos de WPF.
Utilizar "Handles" en un aplicación de WPF
Los controladores de eventos que se conectan a instancias y eventos mediante Handles se deben definir dentro de la declaración de clase parcial de la instancia; este requisito también se aplica a los controladores de eventos que se asignan a través de valores de atributo de elementos. Sólo puede especificar Handles para un elemento en la página que tiene un valor de la propiedad Name (o el Atributo x:Name declarado). Esto es porque la propiedad Name en XAML crea la referencia de instancia necesaria para admitir el formato de referencia Instancia.Evento que la sintaxis de Handles requiere. El único elemento que se puede utilizar para Handles sin una referencia a Name es la instancia del elemento raíz que define la clase parcial.
Puede asignar el mismo controlador a varios elementos separando las referencias Instancia.Evento que aparecen después de Handles con comas.
Puede utilizar Handles para asignar más de un controlador a la misma referencia Instancia.Evento. No asigne importancia al orden en el que se proporcionan los controladores en la referencia de Handles; suponga que los controladores que controlan el mismo evento se pueden invocar en cualquier orden.
Para quitar un controlador que se agregó con Handles en la declaración, puede llamar a RemoveHandler.
Puede utilizar Handles para asociar controladores para eventos enrutados, siempre que asocie los controladores a las instancias que definen el evento controlado en sus tablas de miembros. Para los eventos enrutados, los controladores que se asocian con Handles siguen las mismas reglas de enrutamiento que los asociados como atributos XAML o con la firma común de AddHandler. Esto significa que si el evento está marcado ya como controlado (la propiedad Handled de los datos de evento es True), entonces los controladores asociados con Handles no se invocan en respuesta a esa instancia de evento. El evento podría marcarse como controlado por controladores de instancia en otro elemento de la ruta, o por el control de clases del elemento actual o de otros anteriores en la ruta. Para los eventos de entrada que admiten eventos emparejados de túnel y propagación, la ruta de túnel puede haber marcado como controlado el par de eventos. Para obtener más información acerca de los eventos enrutados, vea Información general sobre eventos enrutados.
Limitaciones de "Handles" para la adición de controladores
Handles no puede hacer referencia a los controladores correspondientes a eventos asociados. Debe utilizar el método de descriptor de acceso add para ese evento asociado o atributos de evento nombreDeTipo.nombreDeEvento en XAML. Para obtener información más detallada, vea Información general sobre eventos enrutados.
Para los eventos enrutados, únicamente se puede usar Handles para asignar controladores para instancias para las que ese evento exista en la tabla de miembros de instancia. Sin embargo, con los eventos enrutados en general, un elemento primario puede ser un agente de escucha para un evento a partir de los elementos secundarios, aunque el elemento primario no tenga ese evento en su tabla de miembros. En la sintaxis de atributo, puede especificar esto mediante un atributo en formato nombreDeTipo.nombreDeMiembro que certifica cuál de los tipos define en realidad el evento que desea controlar. Por ejemplo, un elemento Page primario (sin ningún evento Click definido) puede realizar escuchas para eventos del clic de botón asignando un controlador de atributo en formato Button.Click. Sin embargo, Handles no admite el formato nombreDeTipo.nombreDeMiembro, porque debe admitir un formato de Instancia.Evento en conflicto. Para obtener información más detallada, vea Información general sobre eventos enrutados.
Handles no puede asociar controladores que se invocan para eventos que ya están marcados como controlados. En su lugar, debe utilizar código y llamar a la sobrecarga handledEventsToo del método AddHandler(RoutedEvent, Delegate, Boolean).
Cómo implementa WPF la funcionalidad de "Handles"
Al compilar una página Lenguaje de marcado de aplicaciones extensible (XAML), el archivo intermedio declara referencias FriendWithEvents a todos los elementos de la página cuya propiedad Name está establecida (o cuyo Atributo x:Name se ha declarado). Cada instancia con nombre es potencialmente un elemento que se puede asignar a un controlador a través de Handles.
Nota
Dentro de Microsoft Visual Studio, IntelliSense puede completar los elementos que están disponibles una referencia a Handles de una página. Sin embargo, podría necesitarse un paso de compilación para que el archivo intermedio rellene todas las referencias Friends.
Vea también
Conceptos
Marcar eventos enrutados como controlados y control de clases
Información general sobre eventos enrutados
Información general sobre XAML