UIElement.AddHandler(RoutedEvent, Object, Boolean) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Aggiunge un gestore eventi indirizzati per un evento indirizzato specifico, aggiungendo il gestore alla raccolta di gestori nell'elemento corrente. Specificare handledEventsToo come true per fare in modo che il gestore fornito venga richiamato anche se l'evento viene gestito altrove.
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)
Parametri
- routedEvent
- RoutedEvent
Identificatore dell'evento indirizzato da gestire.
- handler
-
Object
Platform::Object
IInspectable
Riferimento all'implementazione del gestore.
- handledEventsToo
-
Boolean
bool
true per registrare il gestore in modo che venga richiamato anche quando l'evento indirizzato viene contrassegnato come gestito nei dati dell'evento.
false per registrare il gestore con la condizione predefinita che non verrà richiamata se l'evento indirizzato è già contrassegnato come gestito. Il valore predefinito è false.
Non chiedere di modificare regolarmente un evento indirizzato, perché interferisce con la progettazione prevista del sistema di eventi Windows Runtime per la composizione del controllo.
Esempio
In questo esempio viene illustrata la sintassi di base per collegare un gestore eventi con AddHandler e handledEventsToo come true. In questo caso l'evento collegato viene toccato. La posizione tipica dei gestori di collegamento è Loaded per una pagina o OnApplyTemplate per un controllo basato su modelli.
void MyControl::MyPointerPressedHandler(
winrt::Windows::Foundation::IInspectable const &sender,
winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e) {
// implementation..
}
this->AddHandler(
winrt::Windows::UI::Xaml::UIElement::PointerPressedEvent(),
winrt::box_value(winrt::Windows::UI::Xaml::Input::PointerEventHandler(this, &MyControl::MyPointerPressedHandler)),
true);
// Or passing the handler as a lambda, instead of a member function:
this->AddHandler(
winrt::Windows::UI::Xaml::UIElement::PointerPressedEvent(),
winrt::box_value(winrt::Windows::UI::Xaml::Input::PointerEventHandler(
[=](auto &&, winrt::Windows::UI::Xaml::Input::PointerRoutedEventArgs const &args) {
// ...
})),
true);
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);
}
Private Sub Page_Tapped(sender As Object, e As TappedRoutedEventArgs)
' implementation
End Sub
Private Sub Page_Loaded_1(sender As Object, e As RoutedEventArgs)
Me.AddHandler(UIElement.TappedEvent, New TappedEventHandler(AddressOf Page_Tapped), True)
End Sub
Commenti
Non provare a usare AddHandler come sostituto generale della sintassi specifica del linguaggio usata normalmente per i gestori eventi di cablaggio; non funzionerà, perché non tutti gli eventi hanno un identificatore che è possibile passare come routedEvent. AddHandler è specifico per gli eventi indirizzati e destinato principalmente allo scenario specifico abilitato passando handledEventsToo come true. Per altre informazioni, vedi Panoramica degli eventi e degli eventi indirizzati.
Identificatori di evento indirizzati
L'identificatore di evento indirizzato è in genere un membro di proprietà statica di UIElement. Ad esempio, per aggiungere un gestore per l'evento KeyUp , passare KeyUpEvent per questo parametro. Solo un numero ridotto di eventi Windows Runtime ha questo identificatore. Solo gli eventi indirizzati in UIElement hanno un'API identificatore disponibile per questo utilizzo. Si tratta in genere di eventi correlati alle azioni di input a vari livelli: livello di puntatore, livello di movimento, livello di manipolazione. Inoltre, gli eventi di input della chiave possono essere gestiti in questo modo.
Ecco un elenco di eventi indirizzati che espongono un identificatore di evento indirizzato e possono quindi essere elaborati dai gestori registrati da una chiamata AddHandler:
- DoubleTapped
- DragEnter
- DragLeave
- DragOver
- Goccia
- Holding
- KeyDown
- KeyUp
- ManipulationCompleted
- ManipulationDelta
- ManipulationInertiaStarting
- ManipulationStarted
- ManipulationStarting
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerPressed
- PointerReleased
- PointerWheelChanged
- RightTapped
- Tapped
Parametro del gestore
Il parametro del gestore è un parametro non tipizzato, ma è necessario fornire un nuovo delegato che fa riferimento a un metodo del gestore specifico per l'evento desiderato. Ad esempio, se si gestisce un evento KeyUp , passare una nuova istanza KeyEventHandler che fa riferimento a un metodo basato sulla firma del delegato KeyEventHandler . Ciò richiede una dereferenziazione e la sintassi di dereferenziazione varia a seconda del linguaggio in uso. Vedere gli esempi in questo argomento.
Quando usare handledEventsToo
L'elaborazione di eventi di input di basso livello in modo pratico è un'attività complessa. Molti controlli implementano il comportamento in cui un determinato evento viene contrassegnato come gestito e viene sostituito da un altro evento più intuitivo. In genere, un controllo contrassegna un evento indirizzato come gestito solo se esiste un'intenzione di progettazione per farlo. In alcuni scenari, tuttavia, queste intenzioni di progettazione potrebbero non essere quelle richieste dalla gestione specifica dell'evento di input. Per questi scenari la registrazione dei gestori con handledEventsTooè appropriata . Ma non dovresti farlo regolarmente. Richiamare i gestori in risposta a tutti gli eventi anche se gestiti complica la logica di elaborazione degli eventi dell'app. È possibile che si verifichi una diminuzione delle prestazioni se la logica del gestore è sostanziale. È consigliabile collegare gestori a eventi già gestiti solo se si è scoperto che determinati controlli gestiscono eventi che si desidera gestire con la logica dell'app.
Un'altra tecnica per evitare il comportamento di gestione delle classi di un controllo consiste nel sottoclasse che controllano ed eseguono l'override dei relativi metodi On Event, che sono sostituzioni preconfigurate da cui il controllo contrassegna un evento come gestito. Tuttavia, anche questo può essere complesso. Potrebbe essere necessario riprodurre l'implementazione di gestione di un controllo senza chiamare l'implementazione di base, perché l'implementazione di base contrassegna l'evento come gestito. Per altre informazioni, vedi Panoramica degli eventi e degli eventi indirizzati.