Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

UIElement.AddHandler, méthode (RoutedEvent, Delegate)

Ajoute un gestionnaire d'événement routé pour un événement routé spécifié, en ajoutant le gestionnaire à la collection de gestionnaires sur l'élément actuel.

Espace de noms :  System.Windows
Assembly :  PresentationCore (dans PresentationCore.dll)
public void AddHandler(
	RoutedEvent routedEvent,
	Delegate handler
)

Paramètres

routedEvent
Type : System.Windows.RoutedEvent
Identificateur pour l'événement routé à gérer.
handler
Type : System.Delegate
Référence à l'implémentation de gestionnaire.

Implémentations

IInputElement.AddHandler(RoutedEvent, Delegate)

Vous pouvez ajouter plusieurs fois le même gestionnaire pour le même événement sans lever d'exception. Le gestionnaire sera toutefois appelé plusieurs fois lors de la gestion de l'événement. Par conséquent, considérez que ce comportement pourrait avoir des effets secondaires qui doivent être pris en compte dans l'implémentation de votre gestionnaire.

Cette méthode s'utilise en général pour assurer l'implémentation de l'accesseur "add" pour le modèle Microsoft .NET d'accès aux événements relatif à un événement routé personnalisé.

Pour que votre événement personnalisé prenne en charge le routage d'événement, vous devez enregistrer un RoutedEvent à l'aide de la méthode RegisterRoutedEvent. Cet exemple montre les principes de base de la création d'un événement routé personnalisé.

Comme illustré dans l'exemple suivant, enregistrez d'abord un RoutedEvent à l'aide de la méthode RegisterRoutedEvent. Par convention, le nom de champ statique RoutedEvent doit se terminer par le suffixe Event. Dans cet exemple, l'événement porte le nom Tap et la stratégie de routage de l'événement est Bubble. Après l'appel d'inscription, vous pouvez fournir des accesseurs d'événement Common Language Runtime (CLR) ajout/suppression pour l'événement.

Notez que même si, dans cet exemple, l'événement est déclenché au moyen de la méthode virtuelle OnTap, la manière dont vous déclenchez votre événement ou dont votre événement répond aux modifications dépend de vos besoins.

Notez également que cet exemple implémente fondamentalement toute une sous-classe de Button ; cette sous-classe est construite comme un assembly distinct, puis est instanciée comme une classe personnalisée d'une page XAML (eXtensible Application Markup Language) distincte. Pour illustrer le concept, les contrôles sous-classés peuvent être insérés dans des arborescences composées d'autres contrôles. Dans cette situation, les événements personnalisés de ces contrôles ont exactement les mêmes fonctionnalités de routage d'événements que tout élément Windows Presentation Foundation (WPF) natif.


Public Class MyButtonSimple
    Inherits Button

    ' Create a custom routed event by first registering a RoutedEventID
    ' This event uses the bubbling routing strategy
    Public Shared ReadOnly TapEvent As RoutedEvent = EventManager.RegisterRoutedEvent("Tap", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(MyButtonSimple))

    ' Provide CLR accessors for the event
    Public Custom Event Tap As RoutedEventHandler
        AddHandler(ByVal value As RoutedEventHandler)
            Me.AddHandler(TapEvent, value)
        End AddHandler

        RemoveHandler(ByVal value As RoutedEventHandler)
            Me.RemoveHandler(TapEvent, value)
        End RemoveHandler

        RaiseEvent(ByVal sender As Object, ByVal e As RoutedEventArgs)
            Me.RaiseEvent(e)
        End RaiseEvent
    End Event

    ' This method raises the Tap event
    Private Sub RaiseTapEvent()
        Dim newEventArgs As New RoutedEventArgs(MyButtonSimple.TapEvent)
        MyBase.RaiseEvent(newEventArgs)
    End Sub

    ' For demonstration purposes we raise the event when the MyButtonSimple is clicked
    Protected Overrides Sub OnClick()
        Me.RaiseTapEvent()
    End Sub

End Class



public class MyButtonSimple: Button
{
    // Create a custom routed event by first registering a RoutedEventID
    // This event uses the bubbling routing strategy
    public static readonly RoutedEvent TapEvent = EventManager.RegisterRoutedEvent(
        "Tap", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButtonSimple));

    // Provide CLR accessors for the event
    public event RoutedEventHandler Tap
    {
            add { AddHandler(TapEvent, value); } 
            remove { RemoveHandler(TapEvent, value); }
    }

    // This method raises the Tap event
    void RaiseTapEvent()
    {
            RoutedEventArgs newEventArgs = new RoutedEventArgs(MyButtonSimple.TapEvent);
            RaiseEvent(newEventArgs);
    }
    // For demonstration purposes we raise the event when the MyButtonSimple is clicked
    protected override void OnClick()
    {
        RaiseTapEvent();
    }

}



<Window  
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary"
    x:Class="SDKSample.RoutedEventCustomApp"

    >
    <Window.Resources>
      <Style TargetType="{x:Type custom:MyButtonSimple}">
        <Setter Property="Height" Value="20"/>
        <Setter Property="Width" Value="250"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
        <Setter Property="Background" Value="#808080"/>
      </Style>
    </Window.Resources>
    <StackPanel Background="LightGray">
	    <custom:MyButtonSimple Name="mybtnsimple" Tap="TapHandler">Click to see Tap custom event work</custom:MyButtonSimple>
    </StackPanel>
</Window>


Les événements de tunneling sont créés de la même manière, mais avec RoutingStrategy ayant la valeur Tunnel dans l'appel d'inscription. Par convention, les événements de tunneling dans WPF sont précédés du préfixe « Preview ».

Pour voir un exemple du fonctionnement des événements de propagation, consultez Comment : gérer un événement routé.

.NET Framework

Pris en charge dans : 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Merci pour vos suggestions.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft. Tous droits réservés.