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 :

Xaml (ou pas) extention dynamique de l'interface [Débutant(e)]


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut Xaml (ou pas) extention dynamique de l'interface
    Bonjour,

    Voici l'interface temporaire de mon "super-premier-projet".
    il dispose d'une listbox en haut qui contient des groupes et une listbox en bas qui contient des utilisateurs.

    Dans la listbox 2 j'ai un menu contextuel "transfert"
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    <MenuItem Name="UserCMTransferer" Header="Transferer"/>

    j'aimerais que quand je le choisi, le choix s’étende à nouveaux en me listant des groupes (ceux d'en haut) comme éléments de sous-menu. Ce qui signifie générer des "MenuItem" dynamiquement et pouvoir leur associer un événement "click" dédié.
    Code xaml : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="500" Width="500" MinWidth="400" MinHeight="400">
        <Grid Background="#FF0058A3" MinWidth="200" MinHeight="150">
            <ListBox HorizontalAlignment="Stretch" Margin="12,34,12,0" Name="listBox1" VerticalAlignment="Top" Height="100" ItemsSource="{Binding}" SelectionChanged="listBox1_SelectionChanged">
                <ListBox.ContextMenu>
                    <ContextMenu Name="GroupCM">
                        <MenuItem Name="GroupCMCopier" Header="Copier" Click="GroupCMCopier_Click" />
                        <MenuItem Name="GroupCMVoir" Header="Voir"/>
                        <MenuItem Name="GroupCMAjouter" Header="Ajouter une personne"/>
                    </ContextMenu>
                </ListBox.ContextMenu>
            </ListBox>
            <ListBox HorizontalAlignment="Stretch" Margin="12,174,12,55" Name="listBox2" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" SelectionChanged="listBox2_SelectionChanged">
                <ListBox.ContextMenu>
                    <ContextMenu Name="UserCM">
                        <MenuItem Name="UserCMCopier" Header="Copier" Click="UserCMCopier_Click" />
                        <MenuItem Name="UserCMRetirer" Header="Retirer" Click="UserCMRetirer_Click" />
                        <MenuItem Name="UserCMTransferer" Header="Transferer"/>
                        <MenuItem Name="UserCMVoir" Header="Voir"/>
                    </ContextMenu>
                </ListBox.ContextMenu>
            </ListBox>
            <Label Content="label1" Height="28" HorizontalAlignment="Center" Margin="0" Name="label1" VerticalAlignment="Top" Foreground="White" Padding="5" />
            <Label Content="Les utilisateurs du groupe sélectionné" Height="28" HorizontalAlignment="Center" Margin="0,140,0,0" Name="label2" VerticalAlignment="Top" Foreground="White" />
            <TextBox Height="23" HorizontalAlignment="Stretch" Margin="12,0,93,12" Name="textBox1" VerticalAlignment="Bottom" IsEnabled="True" />
            <Button Content="Valider" Height="23" HorizontalAlignment="Right" Margin="0,0,12,12" Name="bValider" VerticalAlignment="Bottom" Width="75" />
        </Grid>
    </Window>

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    Voici la solution que j'ai trouvé
    http://stackoverflow.com/questions/2...enu-at-runtime

    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
    17
            private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                int i = 0;
                int c = groupList.Count;
                UserCMTransferer.Items.Clear();
                getUsers();
                foreach (DictionaryEntry pair in groupList)
                {
                    i++;
                    if ( pair.Key != listBox1.SelectedItem )
                    {
                        MenuItem transferMenu = new MenuItem();
                        transferMenu.Header = "_" + pair.Key;
                        UserCMTransferer.Items.Add(transferMenu);
                    }
                }
            }
    Mais je fais face à un nouveau problème.

    Comment définir des événement lié à ces "menuItem" quand l'utilisateur les choisi, puisque leur contenu est dynamique, comment faire la classe correspondante ?

    Merci

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    Bonjour,

    Comment puis-je faire des classes pour gérer un événement sur des éléments de menu dont je ne connais pas le nom et le nombre (générés dynamiquement) ?

    Est-ce que la solution que j'ai trouvé est une impasse ?

    Merci par avance.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 52
    Par défaut
    Bonjour, si j'ai bien compris votre question il faut associer l’évènement dynamiquement au menu.

    Puis dans le code de l’évènement faire un cast du sender pour retrouver notre menu.

    Vous pouvez utiliser la propriété Tag du menu afin d'identifier vos menu ou le lier à un objet.

    Un petit exemple tout simple :

    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
    17
    18
           private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                MenuItem menu=new MenuItem();
                menu.Header="Menu 1";
                menu.Click += new RoutedEventHandler(UserContextMenu_Click);
                UserContextMenu.Items.Add(menu);
     
                menu = new MenuItem();
                menu.Header = "Menu 2";
                menu.Click += new RoutedEventHandler(UserContextMenu_Click);
                UserContextMenu.Items.Add(menu);
            }
     
            void UserContextMenu_Click(object sender, RoutedEventArgs e)
            {
                MenuItem menu = sender as MenuItem;
                MessageBox.Show("Click sur " + menu.Header);
            }

  5. #5
    Membre actif
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut
    Citation Envoyé par sfxzeus Voir le message
    Bonjour, si j'ai bien compris votre question il faut associer l’évènement dynamiquement au menu.

    Puis dans le code de l’évènement faire un cast du sender pour retrouver notre menu.

    Vous pouvez utiliser la propriété Tag du menu afin d'identifier vos menu ou le lier à un objet.
    Merci beaucoup,

    un petit exemple tout simple est exactement ce qu'il me fallait, ça marche à la perfection.
    Je n'avais jamais fait de programmation "événementielle" je comprend mieux à présent la manière de relier les blocs de code.

    Ce conseil sur le Tag me servira surement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/08/2010, 10h50
  2. Transtypage et objet dynamique pour l'interface
    Par TokTokTok dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 04/03/2009, 19h13
  3. popupmenu dynamique avec divers interfaces
    Par littlepierre dans le forum Interfaces Graphiques
    Réponses: 15
    Dernier message: 10/03/2008, 18h22
  4. comment faire pour ne pas referencer dynamiquement
    Par tarekphp dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 15/05/2007, 12h11
  5. Groupbox pas assez dynamique
    Par gdpasmini dans le forum Windows
    Réponses: 6
    Dernier message: 31/03/2006, 22h33

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