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 :

problème binding listbox!


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Par défaut problème binding listbox!
    Bonjour à tous!!

    J'ai un petit soucis avec une listbox que je voudrais intégrer dans mon logiciel!
    Bref, il s'agit d'un jeu dans lequel on peut sauvegarder une partie en cours et donc cette listbox permet de recencer toutes les parties ayant été sauvegardées et les liste de manière à ce que l'utilisateur puisse en charger une. Jusque là pas de problème, j'ai réussi à binder (non sans mal... c'était la première fois que je le faisais..! ) les infos à ma listbox mais le problème est le suivant:

    J'ai également défini un template (cf le code source) et mon problème est que je voudrai par exemple déclencher un évènement "MouseEnter" sur l'élément "border" de manière à ce que sa couleur change lorsque l'utilisateur passe avec sa souris sur un quelconque élément de la listbox mais cela ne fonctionne pas ou plutot je ne vois pas comment faire...!

    Si quelqu'un pouvait m'aider..! merci par avance!


    Voici le code:

    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
     <Canvas Name="canvas_chargement" Height="730" Width="1002" Canvas.Top="0" Canvas.Left="0" Canvas.ZIndex="100" Opacity="1">
     
                <Canvas.DataContext>
                    <ObjectDataProvider ObjectType="{x:Type c:ListeNom}" MethodName="LoadNames" />
                </Canvas.DataContext>
                <Canvas.Resources>
                    <Style TargetType="{x:Type ListBox}">
                        <Setter Property="ItemTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <Border Name="border_fichier_partie"  BorderBrush="Black" BorderThickness="1" CornerRadius="15" Margin="6" Background="LightBlue" Height="50" Width="760" MouseEnter="textbox_fichier_partie_MouseEnter" MouseLeave="textbox_fichier_partie_MouseLeave" >
                                        <TextBox Name="textbox_fichier_partie"  Text="{Binding Path=joueur}" Cursor="Hand" Background="Transparent" BorderThickness="0"  />
                                    </Border>
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </Canvas.Resources>
     
                <Image Source="/trivia;component/resources/logo_chargement_partie.png" Height="100" Canvas.Top="20" Canvas.Left="180" />
                <Border x:Name="border_loadgame" Height="480" Width="900" Canvas.Top="160" Canvas.Left="50" BorderThickness="1" BorderBrush="Black" CornerRadius="15">
                    <Border.Background>
                        <LinearGradientBrush>
                            <GradientStop Color="#FFCAE7F4" Offset="0"/>
                            <GradientStop Color="#5f8ac4" Offset="2"/>
                        </LinearGradientBrush>
                    </Border.Background>
                    <Rectangle Height="800" Width="600" Fill="Transparent" />
                </Border>
                <ListBox Name="listbox_nomfichier" Canvas.Top="200" Canvas.Left="110" ItemsSource="{Binding}" Height="393.597" Width="800" Background="Transparent" BorderThickness="0" />
            </Canvas>
    Damien

  2. #2
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    Salut,

    avec un Trigger sur le DataTemplate, tu n'as pas besoin d'evenement MouseEnter ou MouseLeave pour coloriser le border. Maintenant, tu as peut-être d'autres choses plus compliquées à faire dans ces évênements !

    en gros, j'ai juste ajouté ça dans ton DataTemplate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={x:Static RelativeSource.Self}}" Value="True">
    <Setter Property="BorderBrush" TargetName="border_fichier_partie" Value="Yellow" />
    </DataTrigger>
    </DataTemplate.Triggers>
     
    
    avec mon exemple de test :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Page.Resources>
    <XmlDataProvider x:Key="TheData" XPath="Personnes">
    <x:XData>
    <Personnes xmlns="">
    <Personne Nom="Marley" Prenom="Bob" />
    <Personne Nom="Thiefaine" Prenom="Hubert-Felix" />
    <Personne Nom="Molko" Prenom="Brian" />
    </Personnes>
    </x:XData>
    </XmlDataProvider>
    </Page.Resources>
     
    <Canvas Name="canvas_chargement" Height="730" Width="1002" Canvas.Top="0" Canvas.Left="0" Canvas.ZIndex="100" Opacity="1">
    <Canvas.DataContext>
    <CollectionViewSource Source="{Binding Source={StaticResource TheData}, XPath=*}" />
    </Canvas.DataContext>
    <Canvas.Resources>
    <Style TargetType="{x:Type ListBox}">
    <Setter Property="ItemTemplate">
    <Setter.Value>
    <DataTemplate>
    <Border Name="border_fichier_partie" BorderBrush="Black" BorderThickness="1" 
    CornerRadius="15" Margin="6" 
    Background="LightBlue" 
    Height="50" Width="760" >
    <TextBlock Name="textbox_fichier_partie" Margin="5" 
    Text="{Binding XPath=@Nom}" Cursor="Hand" Background="Transparent" />
    </Border>
    <DataTemplate.Triggers>
    <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={x:Static RelativeSource.Self}}" Value="True">
    <Setter Property="BorderBrush" TargetName="border_fichier_partie" Value="Yellow" />
    </DataTrigger>
    </DataTemplate.Triggers>
    </DataTemplate>
    </Setter.Value>
    </Setter>
    </Style>
    </Canvas.Resources>
    <Image Source="/trivia;component/resources/logo_chargement_partie.png" Height="100" Canvas.Top="20" Canvas.Left="180" />
    <Border x:Name="border_loadgame" Height="480" Width="900" Canvas.Top="160" Canvas.Left="50" BorderThickness="1" BorderBrush="Black" CornerRadius="15">
    <Border.Background>
    <LinearGradientBrush>
    <GradientStop Color="#FFCAE7F4" Offset="0"/>
    <GradientStop Color="#5f8ac4" Offset="2"/>
    </LinearGradientBrush>
    </Border.Background>
    <Rectangle Height="800" Width="600" Fill="Transparent" />
    </Border>
    <ListBox Name="listbox_nomfichier" Canvas.Top="200" Canvas.Left="110" ItemsSource="{Binding}" Height="393.597" Width="800" Background="Transparent" BorderThickness="0" />
    </Canvas></Page>
    
    voilà, voilà...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Par défaut merci
    merci beaucoup!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Par défaut re-bonjour
    re-bonjour!


    En fait je pensais mon problème réglé, la partie changement de couleur de border est réglée mais maintenant j'ai un autre problème et certainement même le plus important : comment faire pour récupérer la valeur de l'index sélectionné dans la listbox au niveau du code c# de manière à pouvoir l'exploiter donc justement pour le chargement de ma partie?

    Merci par avance pour vos réponses, je galère depuis un petit moment déjà sur ce problème!!

    damien

  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 fait il vaut mieux reccup l'objet selectionné
    dans tous les cas tu as un truc style
    malistbox.selected.....
    index
    item
    items
    value
    vala !!!!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Par défaut
    gné ?

    le problème est justement de récupérer l'objet sélectionné!
    le reste je sais faire

  7. #7
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    humm,
    je vais tenter de traduire ce que disait ikeas (si j'ai bien compris, mais j'ai pas pris Nordique générique en deuxième langue ).

    En fait, tu vas pouvoir acceder à la valeur selectionnée dans la ListBox par l'intermédiaire de ses propriétés SelectedItem ou SelectedIndex.

    Tu utilises celle qui t'arrange, mais perso je me sert rarement du SelectedIndex, parce que une fois que tu as l'index, tu vas l'utiliser dans une ligne du genre ma_Variable = ListBox.Items[ListBox.SelectedIndex], or ça sert à rien, puisque c'est exactement ce que te permet d'obtenir la propriété SelectedItem.

    Donc dans la methode dans laquelle tu veux connaitre ton élément sélectionné, tu as juste à faire MaCombo.SelectedItem.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Par défaut
    oui ça je le sais en fait mais le problème c'est que je ne sais pas comment récupérer la valeur de l'index !
    Je veux dire lorsque je clique sur un item la valeur d'index due la listbox n'est pas modifiée et comme j'utilise le databinding pour renseigner la listbox eh bien je ne vois pas comment faire.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 62
    Par défaut
    c'est bon j'ai trouvé la solution sur le forum, j'utilise la propriété "Tag" de mon bouton et c'est réglé!

    merci pour votre aide et à bientôt!!


    damien

  10. #10
    Membre éprouvé Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    J'avoue que je suis curieux de voir la solution, j'ai pas dû bien comprendre le problème...

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

Discussions similaires

  1. [VBA-E] Problème de ListBox
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2007, 10h42
  2. problème binding xaml
    Par cyberchand dans le forum C#
    Réponses: 6
    Dernier message: 14/02/2007, 16h10
  3. [c#]Problème chargement ListBox
    Par Filippo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/01/2007, 18h30
  4. [ACCESS 2000] Problème de listBox
    Par noemieze dans le forum Access
    Réponses: 3
    Dernier message: 27/06/2006, 08h58
  5. [débutant] Problème de listBox
    Par Anthony17 dans le forum Débuter
    Réponses: 6
    Dernier message: 11/05/2006, 10h05

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