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 :

Click event en code behind


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Par défaut Click event en code behind
    Bonjour!

    J'ai un window1 avec un listbox personnalisé à l'aide d'un fichier resource dictionary (Template.xaml).
    La personnalisation me permet ainsi d'avoir un bouton dans chaque items.

    Mon soucis est que je voudrais déclencher un événement en cliquant dessus par "code behind" dans mon fichier Template.xaml.vb.
    Par exemple récupérer le selectedindex de ma listbox.

    Je vous donne mon code window1 :

    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
     
    <Window x:Class="Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="836.583" Width="1040" WindowStyle="None" ResizeMode="NoResize" Left="0" Top="0">
     
        <Window.Resources>          
            <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Templates.xaml"/>
              </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>               
        </Window.Resources>
     
        <Canvas Height="800" Name="Canvas1" Width="1024" >
    <ListBox ItemTemplate="{StaticResource listBoxJoueur}" ItemsSource="{Binding Tables[0]}" Canvas.Left="382.118" Canvas.Top="-2.75" Height="641.098" Name="LBox_Joueurs" Width="592.5" FontSize="15" />
        </Canvas>            
    </Window>
    mon code Resource :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="test" >
     
        <!-- LISTBOX JOUEURS -->
        <DataTemplate x:Key="listBoxJoueur">
                       <Border CornerRadius="4" 
                        BorderBrush="Navy" 
                        BorderThickness="1" 
                        Padding="1"
                        Margin="1"
                        MinWidth="350" Height="100"
                        x:Name="ItemBorder">
                <Border.Background>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                        <GradientStop Offset="0" Color="LightBlue"/>
                        <GradientStop Offset="1" Color="AliceBlue"/>
                    </LinearGradientBrush>
                </Border.Background>
                <StackPanel>
                   <DockPanel >
                    <Image Width="120" Height="90" Source="{Binding Photo}"/>
                    <TextBlock Text="        "/>
                        <TextBlock Text="{Binding NomJoueurs}" Foreground="RoyalBlue"  FontWeight="Bold" FontSize="15" />
                  <Button Content="fff" Height="50" Width="100" x:Name="_buttonDeleteGroupe" Click="TonEvent" />               
                    </DockPanel >
                   <DockPanel>
                    <TextBlock Text="        "/>
                        <TextBlock Text="{Binding Photo}" Foreground="RoyalBlue"  FontWeight="Bold" FontSize="15" />
                   </DockPanel>
    </StackPanel>
    </Border>
        </DataTemplate>
    </ResourceDictionary>
    Et mon Template.xaml.vb quand je clique sur mon bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Class test
        Dim a As New JUKEBOX_WPF.Application
        Private Sub TonEvent(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
            MsgBox("test", MsgBoxStyle.Critical)
     
          '  MsgBox("JOUEUR N° : " & LBox_Joueurs.SelectedIndex, MsgBoxStyle.Critical)
     
        End Sub
    End Class
    Evidement je n'arrive pas à obtenir l'accès à ma listbox ailleurs que dans Window1...

    Si quelqu'un peut m'aider car je ne trouve pas de solution!Même pas dans le livre de Mr Lebrun... ou alors qu'on me donne le numéro de la page

  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,

    Une solution pour le faire est d'utiliser FindAncestor. Pour ton bouton, tu peux mettre dans la propriété Tag par exemple :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <Button ... Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=SelectedIndex}" />

    Pour faire simple, c'est un binding qui permet de remonter jusqu'au premier élément ListBox (cf. AncestorType) et d'en récupérer la propriété SelectedIndex (cf. Path).

    Ensuite dans ton évènement Click, tu pourras récupérer le "sender" qu'il faudra caster correctement pour récupérer la propriété Tag du Bouton.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    hello dans button de ton template tu peux mettre
    un truc dans ce style
    DataContext ="{Binding RelativeSource=
    "{RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"

    ce qui fait que dans ton evenement tu peux reccup (excuse moi je met le code en c#)
    ListBox lb = ((Button)sender).DataContext as ListBox;

    j'ai pas verifier en code, mais en tout cas c'est un truc dans ce style

  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
    Par défaut
    C'est de la synchro tout ça

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    en plus ma version est meilleurs

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 25
    Par défaut
    Merci les gars je vais essayer ce que vous me dite.

    Par contre je suis déçu car j'y voyais plus simple (genre juste une déclaration quelquonque à faire dans ma class test et si possible en passant par ma classe "test"?

    Juste une précision :
    Imaginons que j'ai un label sur mon window1, est-ce qu'avec votre solution je peux quand je clique sur le bouton de mon item que le contenu de mon item s'affiche dans le content de mon label ?

    Avant dans winform, si il y avait un label sur form1 et qu'on voulait y acceder par le clique d'un boutton sur form2, on utilisait dans la classe form2 form1.label.text=""

    Y a pas moyen de faire pareil en wpf??

    A +

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    oui mais la c'est plus simple tu peux binder le texte du label sur litemselect (et le texte de l'objet contenu) de la listebox ...

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

Discussions similaires

  1. Déclarer un event depuis le code behind
    Par toss.net dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 22/06/2010, 12h21
  2. associer event frameset à code behind asp.net
    Par ouadie99 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 09/06/2008, 15h33
  3. Réponses: 4
    Dernier message: 29/12/2006, 16h54
  4. Réponses: 5
    Dernier message: 24/05/2005, 12h31
  5. [VB.NET] Création d'un tableau en code behind
    Par netr dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2004, 10h02

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