UIElement.AddHandler(RoutedEvent, Object, Boolean) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Fügt einen Routingereignishandler für ein bestimmtes Routingereignis hinzu, wobei der Handler der Handlerauflistung für das aktuelle Element hinzugefügt wird. Geben Sie an handledEventsToo
, dass true
der bereitgestellte Handler aufgerufen werden soll, auch wenn das Ereignis an anderer Stelle behandelt wird.
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)
Parameter
- routedEvent
- RoutedEvent
Ein Bezeichner für das zu behandelnde Routingereignis.
- handler
-
Object
Platform::Object
IInspectable
Ein Verweis auf die Handlerimplementierung.
- handledEventsToo
-
Boolean
bool
true
, um den Handler so zu registrieren, dass er auch dann aufgerufen wird, wenn das routingfähige Ereignis in seinen Ereignisdaten behandelt markiert wird.
false
, um den Handler mit der Standardbedingung zu registrieren, dass er nicht aufgerufen wird, wenn das Routingereignis bereits als behandelt markiert ist. Der Standardwert lautet false
.
Bitten Sie nicht regelmäßig, ein routingfähiges Ereignis erneut zu beheben, da es den beabsichtigten Entwurf des Windows-Runtime Ereignissystems für die Steuerungskomositing beeinträchtigt.
Beispiele
In diesem Beispiel wird die grundlegende Syntax für die Verdrahtung eines Ereignishandlers mit AddHandler
und handledEventsToo
als true
veranschaulicht. In diesem Fall wird das verkabelte Ereignis getippt. Der typische Ort für Verdrahtungshandler ist entweder Loaded für eine Seite oder OnApplyTemplate für ein vorlagenbasiertes Steuerelement.
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);
}
Hinweise
Versuchen Sie nicht, die sprachspezifische Syntax, die Sie normalerweise für die Verdrahtung von Ereignishandlern verwenden, als allgemeinen Ersatz zu verwenden AddHandler
. Dies funktioniert nicht, da nicht alle Ereignisse über einen Bezeichner verfügen, den Sie als routedEvent
übergeben können.
AddHandler
ist speziell für routingfähige Ereignisse vorgesehen und ist hauptsächlich für das jeweilige Szenario vorgesehen, das durch übergeben handledEventsToo
true
als aktiviert wird. Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.
Routingereignisbezeichner
Der Routingereignisbezeichner ist in der Regel ein statisches Eigenschaftselement von UIElement. Um beispielsweise einen Handler für das KeyUp-Ereignis hinzuzufügen, übergeben Sie KeyUpEvent für diesen Parameter. Nur eine kleine Anzahl von Windows-Runtime-Ereignissen verfügt über diesen Bezeichner. Nur weitergeleitete Ereignisse auf UIElement verfügen über eine Bezeichner-API für diese Verwendung. Dies sind im Allgemeinen Ereignisse, die sich auf Eingabeaktionen auf verschiedenen Ebenen beziehen: Zeigerebene, Gestenebene, Bearbeitungsebene. Außerdem können die Schlüsseleingabeereignisse auf diese Weise behandelt werden.
Im Folgenden finden Sie eine Liste der routingbasierten Ereignisse, die einen Routingereignisbezeichner verfügbar machen und daher von Handlern verarbeitet werden können, die durch einen AddHandler
Aufruf registriert werden:
- DoubleTapped
- DragEnter
- DragLeave
- DragOver
- Drop
- Holding
- KeyDown
- KeyUp
- ManipulationCompleted
- ManipulationDelta
- ManipulationInertiaStarting
- ManipulationStarted
- ManipulationStarting
- PointerCanceled
- PointerCaptureLost
- PointerEntered
- PointerExited
- PointerMoved
- PointerPressed
- PointerReleased
- PointerWheelChanged
- RightTapped
- Tapped
Der Handlerparameter
Der handler
Parameter ist ein nicht typisierter Parameter. Sie sollten jedoch einen neuen Delegaten bereitstellen, der auf eine Handlermethode verweist, die für das gewünschte Ereignis spezifisch ist. Wenn Sie beispielsweise ein KeyUp-Ereignis behandeln, übergeben Sie einen neuen KeyEventHandler-instance, der auf eine Methode verweist, die auf dieser KeyEventHandler
Delegatensignatur basiert. Dies erfordert einen Rückschluss, und die Dereferencesyntax variiert je nach verwendeter Sprache. Sehen Sie sich die Beispiele in diesem Thema an.
Verwendung von handledEventsToo
Die praktische Verarbeitung von Eingabeereignissen auf niedriger Ebene ist eine komplexe Aufgabe. Viele Steuerelemente implementieren Verhalten, bei dem ein bestimmtes Ereignis als behandelt gekennzeichnet wird, und wird durch ein anderes intuitiveres Ereignis ersetzt. Im Allgemeinen markiert ein Steuerelement ein routingfähiges Ereignis nur dann als behandelt, wenn dafür eine Entwurfsabsicht besteht. In bestimmten Szenarien sind diese Entwurfsabsichten jedoch möglicherweise nicht das, was Ihre spezielle Behandlung des Eingabeereignisses erfordert. Für diese Szenarien wird die Registrierung von handledEventsToo
Handlern bei true
bedarfsgerecht ausgeführt. Aber Sie sollten dies nicht routinemäßig tun. Das Aufrufen von Handlern als Reaktion auf alle Ereignisse, auch wenn sie behandelt werden, erschwert Ihre eigene App-Ereignisverarbeitungslogik. Es kann zu einer Leistungsminderung führen, wenn die Handlerlogik erheblich ist. Sie sollten Handler nur an bereits behandelte Ereignisse anfügen, wenn Sie festgestellt haben, dass bestimmte Steuerelemente Ereignisse behandeln, die Sie mit App-Logik behandeln möchten.
Eine weitere Technik zum Vermeiden des Klassenbehandlungsverhaltens eines Steuerelements besteht darin, das Steuerelement unterklasse zu unterklassen und die On-Ereignismethoden außer Kraft zu setzen, bei denen es sich um vorkonfigurierte Überschreibungen handelt, mit denen das Steuerelement ein Ereignis als behandelt markiert. Auch dies kann jedoch komplex sein. Möglicherweise müssen Sie die Verarbeitungsimplementierung eines Steuerelements reproduzieren, ohne die Basisimplementierung aufzurufen, da die Basisimplementierung das Ereignis als behandelt markieren würde. Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.