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 :

Accéder au template d'un controle par le code


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut Accéder au template d'un controle par le code
    Bonjour,

    Je cherche a accéder au propriété du controle Image se trouvant dans le template de mon bouton pour y modifier sa hauteur et largeur à partir du code.


    Quelqu'un peut il m'indiquer comment faire?

    voici le code 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
     
            <Button Visibility="Hidden" Click="btnDroite_Click"  x:Name="btnDroite"  Height="25" Margin="0,33.75,0,0" VerticalAlignment="Top" Opacity="0" HorizontalAlignment="Right" Width="25">
                <Button.Template>
                    <ControlTemplate TargetType="{x:Type Button}" >
                        <Image x:Name="Img1" Height="25" Width="25" 
                     Source="/Images/jaunedroite.png" />
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="True">
                                <Setter TargetName="Img1" Property="Source" Value="/Images/bleudroite.png" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Button.Template>
     
            </Button>

    merci

  2. #2
    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
    Salut,

    La classe VisualTreeHelper te le permet. Le lien suivant décrit comment récupérer un élément généré par DataTemplate :
    http://msdn.microsoft.com/fr-fr/library/bb613579.aspx

  3. #3
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Bonsoir,

    Le code ne fonctionne, il semblerait que la raison soit que j'utilise un itemsource car dans mon foreach il me dit qu'il ne peut pas caster l'object "CBackground" en listboxitem.

    Donc comment est ce que je peux faire dans mon cas?
    je ne vois pas

    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
                // Getting the currently selected ListBoxItem
                // Note that the ListBox must have
                // IsSynchronizedWithCurrentItem set to True for this to work
                foreach (ListBoxItem item in listBoxFond.Items)
                {
                    ListBoxItem myListBoxItem =
                        (ListBoxItem)(listBoxFond.ItemContainerGenerator.ContainerFromItem(item));
    
                    // Getting the ContentPresenter of myListBoxItem
                    ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(listBoxFond);
    
                    // Finding textBlock from the DataTemplate that is set on that ContentPresenter
                    DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
                    System.Windows.Controls.Image myImage = (System.Windows.Controls.Image)myDataTemplate.FindName("listimg", myContentPresenter);
    
                    myImage.Height = _height;
                    myImage.Width = _width;
                }


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listBoxFond.ItemsSource = Window1.ListOfBackgrounds;


    dites moi si je n'ai pas été assez clair

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Quand tu "lies" un ListBox avec une source de donnée (ici ton objet ListOfBackgrounds), la propriété Items de ton ListBox contient directement tes objects (contenu dans ListOfBackgrounds).

    En interne, le composant ListBox génére des ListBoxItem pour "englober" tes objets. Tu ne peux donc pas écrire directement le dernier code que tu as mis, tu peux en revanche utiliser l'exemple suivant qui doit fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(objetdelalisteofbackground item in listboxFonds.Items)
    {
    ListViewItem lvi = (ListViewItem)listboxFonds.ItemContainerGenerator.ContainerFromItem(item);
    }

  5. #5
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(objetdelalisteofbackground item in listboxFonds.Items)
    {
    ListViewItem lvi = (ListViewItem)listboxFonds.ItemContainerGenerator.ContainerFromItem(item);
    }
    Il me semble avoir déja essayé, j'ai une erreur de castage: "impossible de caster monobjet en listviewitem".

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 214
    Par défaut
    Je viens de tester sur mon projet actuel et ça fonctionne bien.

    Tu peux nous mettre ton exemple de code qui marche pas ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/09/2014, 10h19
  2. Supprimer un control par le code.
    Par Gualino dans le forum VB.NET
    Réponses: 8
    Dernier message: 02/11/2011, 16h15
  3. Accèder à un controle par autre chose que son nom
    Par Kemanke dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 07/11/2008, 11h24
  4. Delphi7-DOA accéder au champ d'un enregistrement par indice
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 04/05/2005, 14h42
  5. [MF] : Afficher control par dessus image
    Par DarkWiken dans le forum MFC
    Réponses: 2
    Dernier message: 01/04/2005, 22h06

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