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 :

Plusieurs fois le même objet dans un Canvas


Sujet :

Windows Presentation Foundation

  1. #1
    Invité
    Invité(e)
    Par défaut Plusieurs fois le même objet dans un Canvas
    Bonjour,

    Je souhaite afficher deux fois le même UIElement à deux endroits différents. Pour cela j'ai essayé d'ajouter deux fois cet élément dans un Canvas, ou dans deux Canvas différents, mais j'ai l'impression qu'un UIElement ne peut avoir qu'un seul père.

    Comment puis-je malgré tout dupliquer ce UIElement sans pour autant en faire une copie ?

    Merci.

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut dupliquer un element UI
    Bonjour
    Tu peux le faire par code comme ceci:
    Il n'herite pas du binding ni des handlers d'evenement des evenenments.
    code xaml du Window:

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <Window x:Class="WpfCloneElement.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window2" Height="318" Width="361">
            <Canvas Name="monConvasl">
                <Button Canvas.Left="20"
                        Canvas.Top="10"
                        Content="{Binding ElementName=monText ,Path=Text }"   
                        Width="120" 
                        Height="30" 
                        Background="Yellow" 
                        Name="oriButton" 
                        Click="oriBouton"/>
                <Button Canvas.Left="20"
                        Canvas.Top="50"
                        Click="CloneButton"  
                        Content="Clone the Button Open"  
                        Width="120" 
                        Height="30"  />
                <Button Canvas.Left="170"
                        Canvas.Top="50"
                        Click="BtnChange"   
                        Content="Change BackGroundColor"  
                        Width="140" 
                        Height="30"  />
                <Rectangle  Name="oriRect"
                            Canvas.Left="20"
                            Canvas.Top  ="195"
                            Fill="Aquamarine" 
                            Height="40" 
                            Width="130"
                            Stroke="Black"
                            StrokeThickness="2.0"></Rectangle>
                <TextBox  Canvas.Left="170"
                          Canvas.Top="110"
                          Name="monText" 
                          Text="monButton" 
                          Width="140" 
                          Height="30"  >
                </TextBox>
            </Canvas>
    </Window>
    code behind:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    //
    using System.IO;
    using System.Xml;
    using System.Windows.Markup;
     
     
     
     
    namespace WpfCloneElement
    {
        /// <summary>
        /// Logique d'interaction pour Window1.xaml
        /// </summary>
        public partial class Window1 : Window
        {
            public Window1()
            {
                InitializeComponent();
            }
     
            private void CloneButton(object sender, RoutedEventArgs e)
            {
                String  str;
                StringReader strReader ; 
                XmlReader reader;
                //clone button Open
                str = XamlWriter.Save(this.oriButton);
                strReader = new StringReader(str);
     
                reader = XmlReader.Create(strReader);
                Button cloneButton  = XamlReader.Load(reader) as Button;
                cloneButton.Background = Brushes.Aquamarine;
                this.monConvasl.Children.Add(cloneButton);
                Canvas.SetLeft(cloneButton, 20);
                Canvas.SetTop(cloneButton, 110);
     
            //clone figure Rectangle
            str = XamlWriter.Save(this.oriRect);
            strReader = new StringReader(str);
     
            reader = XmlReader.Create(strReader);
            Rectangle cloneRecangle = XamlReader.Load(reader) as  Rectangle;
            cloneRecangle.Fill = Brushes.YellowGreen;
            this.monConvasl.Children.Add(cloneRecangle);
            Canvas.SetLeft(cloneRecangle, Canvas.GetLeft(this.oriRect) + 135);
            Canvas.SetTop(cloneRecangle, Canvas.GetTop(this.oriRect));
     
            }
            //on change le BackGround du bouton & du rectangle originaux
            private void BtnChange(object sender, RoutedEventArgs e)
            {
                this.oriButton.Background = Brushes.Red;
                this.oriRect.Fill = Brushes.Red;
            }
            //on clicke sur le bouton original
            private void oriBouton(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Original Button");
            }
        }
    }
    bon code.......

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jo_le_coco Voir le message
    Comment puis-je malgré tout dupliquer ce UIElement sans pour autant en faire une copie ?
    Comme tu l'as bien noté un UIElement ne peut avoir qu'un seul parent donc impossible d'avoir un même élément pour deux parents différents sans passer par une copie.

    Dans tous les cas il te faudra une copie.
    Le plus simple pour toi pour que les deux UIElement aient des données identiques est de faire de la liaison de données bidirectionnelle entre les copies comme ça visuellement on croira qu'il s'agit d'un même élément alors en mémoire on en aura deux objets indépendants.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ok, dommage, parce qu'en fait ce n'est pas deux fois que je dois afficher cet objet, mais une centaine de fois...

    Merci pour vos réponses détaillées

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/06/2012, 07h51
  2. Instancier plusieurs fois un même objet persisté
    Par taupinfada dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/11/2011, 14h18
  3. Réponses: 2
    Dernier message: 12/01/2010, 12h00
  4. Plusieurs fois la même donnée dans une liste
    Par BRUNO71 dans le forum IHM
    Réponses: 3
    Dernier message: 21/01/2008, 08h22
  5. Plusieurs fois le même .class dans le jar
    Par kenny6 dans le forum Général Java
    Réponses: 7
    Dernier message: 25/04/2007, 16h42

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