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 :

Trouver l'ancêtre d'un contôle déclaré dans un template


Sujet :

Windows Presentation Foundation

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Trouver l'ancêtre d'un contôle déclaré dans un template
    Contexte :
    Windows XP
    Framework 3.5 SP1

    Bonjour,

    Dans le code XAML ci-dessous, j'ai créé un ListView avec 2 colonnes.
    Les entêtes de colonnes ont un aspect dépendant d'un DataTemplate nommé HeaderTemplateButton.
    Le DataTemplate correspond au titre de la colonne à gauche et un bouton à droite.

    Je veux gérer l'évenement click des entêtes de colonnes en interceptant soit le click sur le bouton, soit le click sur le Header.
    Le code de l'évenemement correspond à ceci :

    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
    **********
            void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
            {
                GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
                Button buttonClicked = e.OriginalSource as Button;
                if (headerClicked != null)
                {
                    label1.Content = "Colonne cliquée !";
                }
                if (buttonClicked != null)
                {
                    label1.Content = "Boutton cliqué";
                }
     
            }
    **********

    Quand je clique sur l'entête, je sait lequel est cliqué (headerClicked).
    Par contre, j'aimerais, quand je clique sur le bouton, trouver quel entête est concerné.

    Pourriez vous me dire comment on fait ?

    Merci d'avance.
    Luis.


    Code XAML :
    Code xml : 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
    <Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300">
        <Window.Resources>
             <DataTemplate x:Key="HeaderTemplateButton">
                <DockPanel>
                    <TextBlock HorizontalAlignment="Center" Text="{Binding }"/>
                    <TextBlock HorizontalAlignment="Center" Text=" "/>
                    <Button FontFamily="Wingdings" >$</Button>
                </DockPanel>
            </DataTemplate>
        </Window.Resources>
        <Grid>
            <ListView Margin="18,18,20,57" Name="listView1" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Col1" Width="100" HeaderTemplate="{StaticResource  HeaderTemplateButton}"/>
                        <GridViewColumn Header="Col2" Width="100" HeaderTemplate="{StaticResource  HeaderTemplateButton}"/>
                    </GridView>
                </ListView.View>
            </ListView>
            <Label Height="28" Margin="22,0,20,9" Name="label1" VerticalAlignment="Bottom">Label</Label>
        </Grid>
    </Window>

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Avec la classe VisualTreeHelper, tu peux remonter jusqu'au parent, dans l'arbre visuel.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Bonjour et merci Thomas pour ta réponse.

    En guise de retour d'expérience, je propose ce code pour l'évènement Click :

    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
     
            void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
            {
                GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
                Button buttonClicked = e.OriginalSource as Button;
                if (headerClicked != null)
                {
                    label1.Content = "Colonne cliquée !";
                }
                if (buttonClicked != null)
                {
                    DependencyObject dep=buttonClicked as DependencyObject;
                    while (!(dep is GridViewColumnHeader)) dep = VisualTreeHelper.GetParent(dep);
                    GridViewColumnHeader AncestorHeader = dep as GridViewColumnHeader;
                    label1.Content = "Bouton cliqué . Header ="+AncestorHeader.ToString();
                }
            }
    Cordialement.
    Luis

  4. #4
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Pense au tag si c'est le cas

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

Discussions similaires

  1. Trouver le premier element d'un tableau dans un template
    Par Zucher dans le forum Contribuez
    Réponses: 2
    Dernier message: 27/01/2008, 18h48
  2. Réponses: 7
    Dernier message: 20/07/2006, 10h29
  3. Trouver une valeur qui n'est pas dans un champ
    Par eric41 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2006, 16h48
  4. [dézipper]Trouver si un fichier a 1 accent dans un zip
    Par joseph_p dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 29/12/2005, 08h42
  5. Réponses: 7
    Dernier message: 27/09/2005, 11h54

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