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 :

Atteindre le controle à partir duquel un contextmenu est appelé


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut Atteindre le controle à partir duquel un contextmenu est appelé
    Bonjour,j'ai un bouton qui ouvre un menu contextuel, et je voudrais sur l'évènement click d'un menuItem du menucontextuel, pouvoir modifier les propriétés du bouton, tout ça dans le code behind.

    Merci

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Quel est ton scénario d'utilisation ?

    Sinon il suffit dans l'event-handler du click du menu contextuel d'utiliser ton bouton si tu lui as assigné un nom.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    Mon scenario: je crée dynamiquement un controle (un bouton par exemple), et je voudrais par un click sur un item du menu contextuel, modifier les propriétés de ce controle ajouté en cours d'utilisation (changer la couleur du bouton par exemple).

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Au moment où tu crées ton menu contextuel, tu peut peut-être assigner la propriété DataContext (ou Tag) de ton menu contextuel avec ton bouton :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ContextMenu ctMenu = new ContextMenu();
    MenuItem mi = new MenuItem();
    mi.Header = "Changer couleur";
    mi.Tag = button;
    mi.Click += new RoutedEventHandler(miChangeCouleur_Click);
    ctMenu.Items.Add(mi);
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void miChangeCouleur_Click(object sender, RoutedEventArgs e) {
      Button btn = (Button)((MenuItem)sender).Tag;
      // travail sur le bouton
     
    }

  5. #5
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    Voilà le truc: j'ai défini mon menu contextuel dans les ressources (un dictionnaire de ressources plus précisément).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <ContextMenu x:Key="configCtxtMenu"  x:Shared="false"  >
            <MenuItem   Click="subModif" Header="Modifier " />
            <MenuItem Header="Supprimer" Click="subSuppr"/>
     </ContextMenu>
    Ensuite toujours dans ce dictionnaire de ressources j'attribue ce contextMenu à tous les boutons à travers un style.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Style TargetType="Button">
            <Setter Property="ContextMenu" Value="{StaticResource configCtxtMenu}"/>
        </Style>
    Je ne peux donc pas utiliser la propriété Tag du menuItem dans le code XAML, vu que les boutons en question ne sont pas encore créés.
    Mon idée était de pouvoir modifier n'importe lequel de ces boutons ajoutés en cours d'exécution. c'est pourquoi je voulais exploiter le sender de l'évènement click du menuItem. Seulement à partir de ce sender je n'arrive pas à remonter jusqu'au controle par rapport auquel le contextMenu est positionné.
    J'espère que cette fois-ci ma préoccupation est un peu plus claire, j'ai souvent un peu de mal à me faire comprendre de prime abord

  6. #6
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Salut,

    C'est peut être risqué, mais le PlacementTarger de ton ContextMenu ne serait-il pas ton bouton ?

    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
     
    private void subModif(object sender, RoutedEventArgs e)
            {
                DependencyObject dObj = VisualTreeHelper.GetParent(sender as MenuItem);
                while (dObj.GetType() != typeof(ContextMenu) && dObj != null)
                    dObj = VisualTreeHelper.GetParent(dObj);
     
                if (dObj != null)
                {
                    ContextMenu cm = dObj as ContextMenu;
                    if(cm.PlacementTarget != null && cm.PlacementTarget.GetType() == typeof(Button))
                    Button b = cm.PlacementTarget as Button;
                    // traitement
                }
            }
    @+

  7. #7
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    J'ai essayé ton code thelpi et ça marche. Jusqu'ici y a aucun risque.
    Merci pour le tuyau

  8. #8
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Pas vraiment un risque, c'est juste que je n'étais pas sur que le PlacementTarget soit bien le bouton...

    Pense au tag !

    @+

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/10/2006, 16h22
  2. Réponses: 4
    Dernier message: 08/08/2006, 15h41
  3. Réponses: 1
    Dernier message: 02/06/2006, 21h18
  4. Réponses: 2
    Dernier message: 08/05/2006, 21h27
  5. [C#] custom control à partir d'une image / alpha blending
    Par Cyberwan dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/11/2005, 21h59

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