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

Silverlight Discussion :

comment customiser le menu contextuel


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut comment customiser le menu contextuel
    En fait j'ai envie de customiser le menu contextuel des contrôles silverlight donc j'ai eu une astuce:comme on peut le faire dans une page avec js et que je peux faire appel a une fonction js via le c#,j'ai donc défini le js qui pour le moment ajoute le menu contextuel a un élement de la page voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function tocall() {
        var plugin = $get("Xaml1").oncontextmenu = ChangeAndShowMenu_0
        var menu1 = menuContext.Add("MenuDegrade")
        var itm = menu1.Add("", "Lien vers <B>Google</B>", "ItemDegrade", "ItemOnFocus")
        itm.SetURL("http://www.google.fr/")
        itm.SetFunction("ClickOnItem")
     
        menu1.Add("", "Fichier 2", "ItemDegrade", "ItemOnFocus").SetFunction("ClickOnItem")
        menuContext.Start(false);
       //alert("pourquoi ce long temps de chargement");
     
    }
    mais seulement ma page silverlight ne s'affiche plus lorsque cette fonction s'execute quelqu'un pourrait m'aider? aurais-je fait une erreur dans les appel javascript?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut c'est une grosse piste !!!
    je vais continuer de creuser je te tient au courant mais ça sent drôlement bon merci...
    A+

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut j'ai un petit flou
    En fait je crois que j'ai compris le principe global pour réaliser ce menu contextuel mais il y a une partie que l'auteur du post sur le lien qui me tourmente
    comment afficher les controls qui vont apparaitre dans le menu contextuel ?
    (moi j'ai pensé a un control template alors que lui il fait allusion a une proprièté de dépendance j'avoue que je ne voie pas trop comment mais il précise aussi que ça marche nikel donc je suis un peu embarrassé. help please....

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Un truc dans ce genre sûrement

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class RightClickService
    {
        public static readonly DependencyProperty ContextMenuTemplateProperty =
            DependencyProperty.RegisterAttached("ContextMenuTemplate", typeof(DataTemplate), typeof(RightClickService), null);
     
        public static void SetContextMenuTemplate(UIElement element, DataTemplate value)
        {
            element.SetValue(ContextMenuTemplateProperty, value);
        }
        public static DataTemplate GetContextMenuTemplate(UIElement element)
        {
            return (DataTemplate)element.GetValue(ContextMenuTemplateProperty);
        }
     
    }

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Image>
        <local:RightClickService.ContextMenuTemplate>
            <DataTemplate>
                <Canvas>
                    <Button Content="test" />
                </Canvas>
            </DataTemplate>
        </local:RightClickService.ContextMenuTemplate>
    </Image>

    Il te faut par contre toujours une méthode pour savoir quel élément a été cliqué. La méthode du MouseEnter parait la mieux.

    Tu peux rajouter ça à la casse RightClickService et gérer le MouseEnter/MouseLeave pour tous tes items (c'est pas pratique du tout j'avoue).

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    public static UIElement CurrentElement { get; set; }

    Lorsque tu détectes le clic droit, tu récupères l'élément, tu récupères ensuite son ContextMenuTemplate

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTemplate template = RightClickService.GetContextMenuTemplate(RightClickService.CurrentElement);

    Si il est différent de null, tu l'affiches.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (template != null)
    {
        UIElement ui = template.LoadContent() as UIElement;
     
        LayoutRoot.Children.Add(ui); // a remplacer par ce que tu veux.
    }

    Si le DataTemplate est null, tu itères sur le Parent jusqu'à à en trouver un (ou à avoir Parent à null) et tu l'affiches aussi.

    Voilà la méthode avec l'Attached Property. Je ne sais pas si c'est la meilleure mais elle doit fonctionner.

    Cette technique permet surtout d'avoir des ContextMenu différents selon les éléments.

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Y'a peut-être moyen de faire comme pour le ToolTipService.

    Je vais investiguer tout à l'heure.

Discussions similaires

  1. Comment supprimer un Menu contextuel personnalisé ?
    Par evlp2004@hotmail.com dans le forum Access
    Réponses: 2
    Dernier message: 10/04/2008, 16h24
  2. Comment gérer le menu contextuel sur access 2007
    Par chocoprof dans le forum IHM
    Réponses: 1
    Dernier message: 16/12/2007, 18h34
  3. Réponses: 0
    Dernier message: 11/12/2007, 17h50
  4. comment creer un menu contextuel?
    Par christianf dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 20/09/2007, 10h45
  5. Réponses: 1
    Dernier message: 31/07/2005, 17h44

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