UIElement.AddHandler(RoutedEvent, Object, Boolean) Método

Definición

Agrega un controlador de eventos enrutados para un evento enrutado especificado. Para ello, agrega el controlador a la colección de controladores en el elemento actual. Especifique como true para que se invoque handledEventsToo el controlador proporcionado incluso si el evento se controla en otro lugar.

public:
 virtual void AddHandler(RoutedEvent ^ routedEvent, Platform::Object ^ handler, bool handledEventsToo) = AddHandler;
void AddHandler(RoutedEvent const& routedEvent, IInspectable const& handler, bool const& handledEventsToo);
public void AddHandler(RoutedEvent routedEvent, object handler, bool handledEventsToo);
function addHandler(routedEvent, handler, handledEventsToo)
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Object, handledEventsToo As Boolean)

Parámetros

routedEvent
RoutedEvent

Identificador del evento enrutado que se va a controlar.

handler
Object

Platform::Object

IInspectable

Referencia a la implementación del controlador.

handledEventsToo
Boolean

bool

true para registrar el controlador de forma que se invoque incluso cuando el evento enrutado se marca como controlado en sus datos de evento.

false para registrar el controlador con la condición predeterminada que no se invocará si el evento enrutado ya está marcado como controlado. El valor predeterminado es false.

No pida periódicamente que vuelva a controlar un evento enrutado, ya que interfiere con el diseño previsto del sistema de eventos de Windows Runtime para la composición de controles.

Ejemplos

En este ejemplo se muestra la sintaxis básica para conectar un controlador de eventos con AddHandler y handledEventsToo como true. En este caso, el evento que se está conectando es Tapped. El lugar típico para conectar controladores se carga para una página o OnApplyTemplate para un control con plantilla.

void MainPage::pageRoot_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
     //implementation
}
void MainPage::pageRoot_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
     this->AddHandler(UIElement::TappedEvent, ref new TappedEventHandler(this, &MainPage::pageRoot_Tapped), true);
}
private void pageRoot_Tapped(object sender, TappedRoutedEventArgs e)
{
    //implementation
}
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
    this.AddHandler(UIElement.TappedEvent, new TappedEventHandler(pageRoot_Tapped), true);
}

Comentarios

No intente usar AddHandler como sustituto general de la sintaxis específica del lenguaje que normalmente usa para conectar controladores de eventos; no funcionará, ya que no todos los eventos tienen un identificador que puede pasar como routedEvent. AddHandler es específicamente para eventos enrutados y está pensado principalmente para el escenario concreto habilitado pasando handledEventsToo como true. Para obtener más información, consulta Introducción a eventos y eventos enrutados.

Identificadores de eventos enrutados

El identificador de evento enrutado suele ser un miembro de propiedad estática de UIElement. Por ejemplo, para agregar un controlador para el evento KeyUp , pase KeyUpEvent para este parámetro. Solo un pequeño número de eventos de Windows Runtime tienen este identificador; solo los eventos enrutados en UIElement tienen una API de identificador disponible para este uso. Por lo general, estos son eventos relacionados con las acciones de entrada en varios niveles: nivel de puntero, nivel de gesto, nivel de manipulación. Además, los eventos de entrada clave se pueden controlar de esta manera.

Esta es una lista de eventos enrutados que exponen un identificador de evento enrutado y, por tanto, los controladores registrados por una AddHandler llamada pueden procesarse:

Parámetro del controlador

El handler parámetro es un parámetro sin tipo, pero debe proporcionar un nuevo delegado que haga referencia a un método de controlador específico del evento deseado. Por ejemplo, si controla un evento KeyUp , pase una nueva instancia de KeyEventHandler que haga referencia a un método basado en esa KeyEventHandler firma de delegado. Esto requiere una desreferencia y la sintaxis de desreferencia varía en función del lenguaje que use. Vea los ejemplos de este tema.

Cuándo usar handledEventsToo

El procesamiento de eventos de entrada de bajo nivel de forma práctica es una tarea compleja. Muchos controles implementan el comportamiento en el que un determinado evento se marca como controlado y se reemplaza por otro evento más intuitivo. Por lo general, un control marcará un evento enrutado como controlado solo si hay alguna intención de diseño para hacerlo. Sin embargo, en ciertos escenarios, esas intenciones de diseño podrían no ser lo que requiere su control concreto del evento de entrada. Se trata de estos escenarios en los que se registran los controladores con handledEventsToo según true corresponda. Pero no deberías hacer esto de forma rutinaria. Invocar controladores en respuesta a todos los eventos, incluso si se controla, complicará su propia lógica de procesamiento de eventos de la aplicación. Es posible que vea una disminución del rendimiento si la lógica del controlador es sustancial. Solo debe adjuntar controladores a eventos ya controlados si ha descubierto que determinados controles controlan eventos que desea controlar con la lógica de la aplicación.

Otra técnica para evitar el comportamiento de control de clases de un control es subclase que controla e invalida sus métodos OnEvent , que están preconfigurados por los que el control marca un evento como controlado. Sin embargo, esto también puede ser complejo. Es posible que tenga que reproducir la implementación de control de un control sin llamar a la implementación base, ya que la implementación base marcaría el evento como controlado. Para obtener más información, consulta Introducción a eventos y eventos enrutados.

Se aplica a

Consulte también