UIElement.AddHandler(RoutedEvent, Object, Boolean) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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:
- DoubleTapped
- DragEnter
- DragLeave
- DragOver
- Soltar
- Holding
- KeyDown
- KeyUp
- ManipulationCompleted
- ManipulationDelta
- ManipulationInertiaStarting
- ManipulationStarted
- ManipulationStarting
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerPressed
- PointerReleased
- PointerWheelChanged
- RightTapped
- Tapped
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.