IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Interception Evénement dans applic WPF lancé par WPF UserControl


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut Interception Evénement dans applic WPF lancé par WPF UserControl
    Bonjour à tous !
    J'ai un petit problème avec mon UserControl WPF.
    Il lance bel et bien un événement mais je ne sais pas comment l'intercepter de l'autre côté, dans mon application WPF qui implémente ce UserControl.

    Voici mon événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Evénement lancé lorsqu'on click sur Login, qui sera intercepté par les applications utilisant ce UC
    public static RoutedEvent EvenementLogin = EventManager.RegisterRoutedEvent("EvenementLoginHandler", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ControleWPF));
    (typeof(ControleWPF) -> ControleWPF étant mon UserControl)

    Voici la procédure appelée pour lancer l'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Lance un événement
    public void RaiseEvenementLogin()
    {
       RoutedEventArgs eventArgs = new RoutedEventArgs(EvenementLogin);
       RaiseEvent(eventArgs);
    }
    Ensuite, j'ai le Handler, mais je ne sais pas s'il doit aller côté UserControl ou Application...
    Voici celui que j'ai en ce moment dans la même classe que mon UserControl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Gère un événement
    public event RoutedEventHandler Login
    {
       add { AddHandler(EvenementLogin, value); }
       remove { RemoveHandler(EvenementLogin, value); }
    }
    Il ne sert à rien jusqu'à présent, qu'il soit là où non l'événement est tout de même lancé, donc je suppose que c'est lui qui s'occupe d'intercepter l'événement lancé ?

    Fais-je une mauvaise manipulation ?
    Où doit aller le Handler ? N'est-ce pas lui qui doit intercepter l'événement qui vient d'être lancé ?

    Merci à vous


    EDIT:
    En gros, j'aimerais savoir comment récupérer une événement lancé par un UserControl afin de la traîter dans mon application WPF

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Ok j'y suis arrivé, c'étaient des notions théoriques qu'il me manquait.
    Je suis tombé sur un petit tuto de chez vous.

    Voici mon code pour ceux que ça pourrait intéresser par la suite :
    De mon côté UserControl j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //Evénement lancé lorsqu'on click sur Login, qui sera intercepté par les applications utilisant ce UC
    public static readonly RoutedEvent EvenementLogin = EventManager.RegisterRoutedEvent("EvenementLoginHandler", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(ControleWPF));
     
    //Lance un événement
    public void RaiseEvenementLogin()
    {
       RoutedEventArgs eventArgs = new RoutedEventArgs(EvenementLogin);
       RaiseEvent(eventArgs);
    }
     
    //Gère un événement, c'est chez lui qu'il faut s'abonner !
    public event RoutedEventHandler GestEvenementLogin
    {
       add { AddHandler(EvenementLogin, value); }
       remove { RemoveHandler(EvenementLogin, value); }
    }
    Il vous suffira de lancer l'événement à un moment donné ainsi :

    Ensuite, du côté de mon application WPF qui intègre ce UserControl, il suffit de créer une procédure qui va gérer cet événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void unEvenement(object sender, EventArgs args)
    {
       TxtEvent.Text = "Evenement produit !";
    }
    Ensuite, il me suffira de m'abonner au Handler côté UserControl en lui spécifiant que l'événement sera traîté par ma procédure "unEvenement" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UCLogin.GestEvenementLogin += unEvenement;
    Ainsi, à chaque fois qu'un événement sera produit la procédure la récupérera.

    Voilà, désolé de poster de temps en temps un message que je résous moi-même par la suite. Mais cela me permet en même temps de m'éclaircir un maximum les idées en vous les énonçant.

    Encore un Joyeux Noël à vous et une bonne année 2011 !

    Patrick

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Passage de variable entre 2 fichiers .xaml dans application WPF
    Par vaio25 dans le forum C#
    Réponses: 2
    Dernier message: 19/05/2012, 21h46
  2. Label dans une fenêtre lancée par un thread qui ne s'affiche pas !
    Par totojava dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 23/01/2011, 15h07
  3. Composant COM dans application WPF
    Par etiennegaloup dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 21/12/2010, 13h26
  4. Réponses: 0
    Dernier message: 04/08/2009, 17h05
  5. Afficher un composant Winform dans WPF (en passant par un UserControl(WPF))
    Par karim.user dans le forum Windows Presentation Foundation
    Réponses: 17
    Dernier message: 21/04/2009, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo