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 :

Ajouter dynamiquement élements dans ListBox?


Sujet :

Silverlight

  1. #1
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut Ajouter dynamiquement élements dans ListBox?
    Bonjour,
    Mon problème est le suivant:

    Je désire ajouter dans une Listbox une Grid composée d'un StackPanel, de textblock et d'images. Cette grid est déjà déclarée dans le xaml.

    Lorsque dans le code-behind, j'utilise la commande items.add de la listbox, une erreur >>L'élément est déjà l'enfant d'un autre élément.<< survient.

    Que dois-je faire?
    Je patoge là...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Ben apparemment la grille est déjà enfant d'un autre élément... il faut d'abord l'enlever de son parent actuel
    Fais voir le code que tu utilises

  3. #3
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Le Xaml:


    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
    19
    20
    21
    22
    23
    24
    <UserControl
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	x:Class="SilverlightApplicationTESTESTEST.Page" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="1360" d:DesignHeight="832" xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows">
     
    	<Grid Height="793" Width="1249.438" Background="#FFFFFFFF">
    			<StackPanel Margin="128,124,265,394" x:Name="StackPanel1" Orientation="Horizontal">
    			<ListBox Height="246.5" Width="142.457" Canvas.ZIndex="20" Margin="10,0,0,0" x:Name="LB2">
    				<ListBox Height="246.5" Width="142.457" Canvas.ZIndex="20" x:Name="LB1"/>
    			</ListBox>
    			<ListBox Height="246.5" Width="142.457" Canvas.ZIndex="20" Margin="10,0,0,0" x:Name="LB3"/>
    		</StackPanel>
     
    			<Grid Height="216" x:Name="GridArticle2" Width="131" d:LayoutOverrides="Width, Height" VerticalAlignment="Top" Margin="349,-474.5,0,0" HorizontalAlignment="Left">
    				<StackPanel Margin="6.516,0,8.484,8" d:LayoutOverrides="HorizontalAlignment"/>
    				<TextBlock Height="24" Margin="8.516,12,10.484,0" x:Name="TextBlock3" VerticalAlignment="Top" Width="112" Canvas.ZIndex="10" Text="TextBlock1" TextWrapping="Wrap" d:LayoutOverrides="Width, Height"/>
    				<Image Height="80" Margin="20.516,36,22.484,100" x:Name="Image2" Width="88" Canvas.ZIndex="10" Source="imageTestArticle.png" d:LayoutOverrides="Width, Height"/>
    				<TextBlock Height="24" Margin="16.516,0,18.484,76" x:Name="TextBlock4" VerticalAlignment="Bottom" Width="96" Canvas.ZIndex="10" FontSize="16" Text="TextBlock2" TextWrapping="Wrap" d:LayoutOverrides="Width, Height"/>
    				<Image Margin="0,5.177,0,-0.177" Source="bordure.png" Stretch="Fill"/>
    			</Grid>
     
    			</Grid>
     
    </UserControl>
    Je désire ajouter 'GridArticle2' dans la ListBox 'LB2'.
    Effectivement, 'GridArticle2' est enfant de la Grid principale. Mais je ne sais pas comment faire pour la deshériter... RIP

    le code behind en vb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LB2.Items.Add(GridArticle2)
    En fait, l'idéal pour moi serait d'ajouter directement 'GridArticle2' au Stackpanel, sans passer par une ListBox, mais là je me noie...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je comprends rien à ton code... essaie de l'indenter correctement, sinon c'est impossible de comprendre la hiérarchie des contrôles
    Pourquoi tu mets une ListBox dans une autre ListBox ? et quel résultat veux-tu obtenir au final ?
    Si tu veux mettre GridArticle2 dans le StackPanel, il suffit de le mettre entre les balises <StackPanel> et </StackPanel>... ou alors j'ai pas compris ce que tu voulais faire

  5. #5
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Citation Envoyé par tomlev Voir le message
    J
    Si tu veux mettre GridArticle2 dans le StackPanel, il suffit de le mettre entre les balises <StackPanel> et </StackPanel>... ou alors j'ai pas compris ce que tu voulais faire
    Oui mais comment puis-je le faire dynamiquement?

    En fait, a chaque load de ma page, le contenu du stackpanel doit être charger à partir du contenu d'une Grid.
    Cette Grid se trouvant sur ma page, à chaque fois j'ai cette erreur d'élément déjà enfant.


    Ce que je cherche à faire, c'est d'avoir une page contenant un stackpanel qui contient un ensemble de Grid contenant chacune du texte et des images.
    Le texte et les images de chaque Grid variant d'une Grid à l'autre et à chaque chargement de la page.

    Si vous connaissez une autre méthode plus simple, je suis preneur.
    En tout les cas, merci pour l'aide.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par roster Voir le message
    Oui mais comment puis-je le faire dynamiquement?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GridArticle2.Parent.RemoveLogicalChild(GridArticle2);
    StackPanel1.AddChild(GridArticle2);

  7. #7
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Malheureusement, je n'ai pas de RemoveLogicalChild ou AddChild?!
    Faut-il faire un import?

    PS: j'utilise SL 2 version finale. Je précise car j'ai l'impression qu'entre chaque version il y a des différences notables.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    ah pardon, c'est en WPF, pas Silverlight... essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GridArticle2.Parent.Children.Remove(GridArticle2);
    StackPanel1.AddChild(GridArticle2);

  9. #9
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Cela ne marche pas, je n'ai ni '.Parent.Children.Remove' ni '.AddChild'.

    Je pense que je vais tout simplement passer par les ressources pour charger chaque Grid, tant pis!

    Je reste toutes ouïes à de nouvelles propositions...

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par roster Voir le message
    Cela ne marche pas, je n'ai ni '.Parent.Children.Remove' ni '.AddChild'.
    Ah oui, y a un cast à faire... et l'interface IAddChild n'existe pas en Silverlight, seulement en WPF. On va y arriver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (GridArticle2.Parent as Panel).Children.Remove(GridArticle2);
    StackPanel1.Children.Add(GridArticle2);

  11. #11
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Cette fois c'est bon!
    Merci pour ton aide si précieuse!

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

Discussions similaires

  1. Ajout dynamique input dans formulaire
    Par tophe03 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 22/02/2009, 14h39
  2. ajouter dynamiquement hyperlinkfield dans gridview
    Par tilily dans le forum ASP.NET
    Réponses: 8
    Dernier message: 02/02/2009, 12h06
  3. Ajouts d'élements dans un modèle d'elements finis
    Par matt394 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 24/07/2007, 11h10
  4. comment ajouter des élements dans une liste ?
    Par ryoussef19 dans le forum VC++ .NET
    Réponses: 5
    Dernier message: 15/06/2007, 16h02
  5. [Generics] ajouter un élement dans une liste typée
    Par anitshka dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/02/2007, 11h04

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