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

Silverlight Discussion :

Selection d'un Listboxitem avec un clic droit?


Sujet :

Silverlight

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut Selection d'un Listboxitem avec un clic droit?
    Bonjour,

    Comme précisé dans le titre je cherche a sélectionner un objet d'une Listbox lorsque j'effectue un clic droit sur celui-ci, tout comme le ferai le clic gauche de la souris. J'ai pas mal chercher et regarder a droite et a gauche mais je n'ai rien trouver de probant si ce n'est le 'IndexFromPoint', mais cette méthode ne semble pas accessible dans Silverlight. J'en viens a me demander si ce que je cherche a réaliser est possible.

    Voici le code XAMl de ma Listbox:

    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
     
    <Canvas x:Name="Contextmenu_canvas" Grid.Row="1">
        <ListBox Grid.Row="1" x:Name="ContactList" Margin="6" ItemsSource="{Binding ''}">
             <ListBox.ItemTemplate>
                 <DataTemplate>
                     <StackPanel Orientation="Horizontal">
                         <Image Source="{Binding Status_Image}" Margin="0,0,3,0" />
                         <StackPanel Orientation="Vertical">
                             <TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Name}" FontWeight="Bold" FontSize="13" Foreground="Black" />
                             <TextBlock Height="20" HorizontalAlignment="Left" Text="{Binding Message}" FontSize="11" Foreground="Gray" />
                         </StackPanel>
                         <Image Source="{Binding NotifImg}" Margin="8,0,0,0"/>
                     </StackPanel>
                 </DataTemplate>
             </ListBox.ItemTemplate>
        </ListBox>
    </Canvas>

    Je ne sais même plus sur quel item je pourrais mettre l'event RightclickDown et RightclickUp. Donc si quelqu'un a une solution pour faire marcher IndexFromPoint ou alors simplement selectionner un ListboxItem avec un clic droit je suis preneur.

    Cordialement, Ephismen.

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Bonjour,

    As-tu regardé ce thread qui ressemble pas mal au tiens ?

    http://www.developpez.net/forums/d98...ew-clic-droit/

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Oui j'ai lu attentivement ce post ainsi que les liens qui y sont postes et je dois avouer que je n'arrive pas a mettre en place ce qu'il préconise. Quoi que je fasse j'obtiens sois des exceptions ou alors des valeur aberrantes.

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Je pense que le plus simple serait de redefinir l'ItemContainerStyle de ta ListBox en remplacant son template à l'aide d'un ListBoxItem pourvu de l'evenement de bouton de souris à droite.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Tu sous-entend par la instancier en code-behind un nouveau ListboxItem pour chaque entrée, pourvu d'un évènement right-click?
    Si c'est le cas j'y avais penser mais sachant que je bind une classe qui hérite de 'INotifyChange' cela ne risque t-il pas de compromettre son comportement quand a la mise a jour des données?

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Voici ce dont je te parlais :

    Avec Blend j'ai récupé le template par défaut d'un ListBoxItem que j'ai mis dans l'ItemContainerStyle

    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
    56
    57
            <ListBox x:Name="ListBox" MouseRightButtonDown="ListBox_MouseRightButtonDown">
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="ListBoxItem">
                                    <Grid Background="{TemplateBinding Background}" MouseRightButtonUp="Grid_MouseRightButtonUp">
                                        <VisualStateManager.VisualStateGroups>
                                            <VisualStateGroup x:Name="CommonStates">
                                                <VisualState x:Name="Normal"/>
                                                <VisualState x:Name="MouseOver">
                                                    <Storyboard>
                                                        <DoubleAnimation Duration="0" To=".35" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor"/>
                                                    </Storyboard>
                                                </VisualState>
                                                <VisualState x:Name="Disabled">
                                                    <Storyboard>
                                                        <DoubleAnimation Duration="0" To=".55" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="contentPresenter"/>
                                                    </Storyboard>
                                                </VisualState>
                                            </VisualStateGroup>
                                            <VisualStateGroup x:Name="SelectionStates">
                                                <VisualState x:Name="Unselected"/>
                                                <VisualState x:Name="Selected">
                                                    <Storyboard>
                                                        <DoubleAnimation Duration="0" To=".75" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor2"/>
                                                    </Storyboard>
                                                </VisualState>
                                            </VisualStateGroup>
                                            <VisualStateGroup x:Name="FocusStates">
                                                <VisualState x:Name="Focused">
                                                    <Storyboard>
                                                        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="FocusVisualElement">
                                                            <DiscreteObjectKeyFrame KeyTime="0">
                                                                <DiscreteObjectKeyFrame.Value>
                                                                    <Visibility>Visible</Visibility>
                                                                </DiscreteObjectKeyFrame.Value>
                                                            </DiscreteObjectKeyFrame>
                                                        </ObjectAnimationUsingKeyFrames>
                                                    </Storyboard>
                                                </VisualState>
                                                <VisualState x:Name="Unfocused"/>
                                            </VisualStateGroup>
                                        </VisualStateManager.VisualStateGroups>
                                        <Rectangle x:Name="fillColor" Fill="#FFBADDE9" IsHitTestVisible="False" Opacity="0" RadiusY="1" RadiusX="1"/>
                                        <Rectangle x:Name="fillColor2" Fill="#FFBADDE9" IsHitTestVisible="False" Opacity="0" RadiusY="1" RadiusX="1"/>
                                        <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}"/>
                                        <Rectangle x:Name="FocusVisualElement" RadiusY="1" RadiusX="1" Stroke="#FF6DBDD1" StrokeThickness="1" Visibility="Collapsed"/>
                                    </Grid>
                                </ControlTemplate>
    
                            </Setter.Value>
                        </Setter>
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>
    on s'abonne ensuite aux evenements MouseRightButtonDown de la listBox et du Grid du ListBoxItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void Grid_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
            {
                // récupération de la donnée
                object data = (sender as FrameworkElement).DataContext;
            }
     
            private void ListBox_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
            {
                // permet de ne pas avoir le menu Silverlight
                e.Handled = true;
            }

  7. #7
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2006
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 389
    Points : 244
    Points
    244
    Par défaut
    slt,

    En faite dans ton cas il faut que tu mettes ce codes dans ta listbox en xaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MouseRightButtonDown="clicBoutonDroitDown" MouseRightButtonUp="clicBoutonDroitUp" LoadingRow="loadLigne"
    Et apres il ne te reste plus qu'à gérer les évenements (loadLigne, clicBoutonDroitDown et clicBoutonDroitUp)

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Je viens d'essayer avec ça et ça a l'air de plutôt bien marcher

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ListBox ItemsSource="{Binding Path=View, Source={StaticResource viewModel}}" MouseRightButtonDown="ListBox_MouseRightButtonDown">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Path=Name}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

    Et le code C# qui fait tout

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void ListBox_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), (sender as ListBox)).OfType<ListBoxItem>().First().IsSelected = true;
    }

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Merci a tous pour vos efforts et désole pour la lenteur de ma réponse, vos réponses m'ont permis d'y voir un peu plus clair dans le fonctionnement de Silverlight et grâce a Skyounet tout fonctionne parfaitement et simplement!

    Cordialement, Ephismen.

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

Discussions similaires

  1. Selectionner la case d'un JList avec le clic droit
    Par Ceubex dans le forum Composants
    Réponses: 4
    Dernier message: 12/01/2011, 13h43
  2. Réponses: 4
    Dernier message: 18/02/2009, 18h14
  3. Réponses: 0
    Dernier message: 07/11/2008, 23h48
  4. menu avec le clic droit
    Par Romantic_a dans le forum Windows Forms
    Réponses: 4
    Dernier message: 06/04/2008, 23h28
  5. Problème avec le clic droit
    Par nebule dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/10/2004, 16h29

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