Bonjour à tous,

J'ai un petit soucis avec un menucontextuel et j'aurai besoin d'un petit coup de main.

Contexte :
Je cherche à afficher une liste de "communication" (tel, mail etc...) dans un stackpanel regroupé par type de communication. Chaque communication a un menu contextuel me permettant de copier, supprimer ou éditer cette dernière.

Jusque là, aucun problème.

Ensuite, j'ai un datatemplate qui me permet d'afficher ces moyens de communication, un autre pour l'édition.

Pour l'affichage, j'ai un menu contextuel qui fonctionne très bien via clique droit.

Sur mon menu contextuel, j'ai bindé un booleen présent dans ma VM sur la propriété "isopen"

Pour l'affichage, j'ai un bouton qui lors du clique passe ce booléen à "true" afin d'ouvrir le menu.

Malheureusement, ce bouton ne réagi que si j'ai déjà activé le menu contextuel sur cet élément via le clique droit.

par exemple :

j'ai 3 communications. Je fait un clique droit sur le premier, le menu s'ouvre. Jusque là, rien d'anormal. Si je clique sur le bouton permettant d'ouvrir le même menu, il s'ouvre. Par contre si je clique sur le bouton de la communication "2" rien ne se passe. Pour que ça fonctionne, je suis obligé de faire un clique droit pour l'ouvrir une première fois et après je pourrai cliquer sur le bouton qui me permet d'ouvrir le menu. Mais là il ne fonctionnera que sur la communication "2"

Je ne sais pas si je suis très clair...

En gros le menu contextuel via clique droit fonctionne tout le temps. Mais via le bouton, il fonction si et seulement si j'ai activer une première fois le menu sur l'élément.

Voici le xaml de mon datatemplate "affichage"

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
    <ContextMenu x:Key="ContextMenu" Name="ctxMenu" IsOpen="{Binding OuvertureMenuContextuel, UpdateSourceTrigger=PropertyChanged}">
        <MenuItem Header="Editer" Command="{Binding EditerCommunication}">
            <MenuItem.Icon>
                <libelles:Libelle FontSize="{DynamicResource TailleIcone}" Margin="0,0,0,0" Style="{DynamicResource AwesomeFont}" Foreground="{DynamicResource Bleu}" Content="{DynamicResource IconeEditer}" />
            </MenuItem.Icon>
        </MenuItem>
        <MenuItem Header="Supprimer" Name="MenuSupprimer" Command="{Binding RemoveCommunication}">
            <MenuItem.Icon>
                <libelles:Libelle FontSize="{DynamicResource TailleIcone}" Margin="0,0,0,0" Style="{DynamicResource AwesomeFont}" Foreground="{DynamicResource Violet}" Content="{DynamicResource IconeSupprimer}" />
            </MenuItem.Icon>
        </MenuItem>
        <MenuItem Name="mnuCopier" Header="Copie de la valeur" Command="{Binding CopierCommunication}">
            <MenuItem.Icon>
                <libelles:Libelle Name="lblCopier" FontSize="{DynamicResource TailleIcone}" Margin="0,0,0,0" Style="{DynamicResource AwesomeFont}" Foreground="{DynamicResource Noir}" Content="{DynamicResource IconeCopier}" />
            </MenuItem.Icon>
        </MenuItem>
        <MenuItem Name="mnuAction" Header="Action" Command="{Binding ActionCommunication}">
            <MenuItem.Icon>
                <libelles:Libelle Name="lblAction" FontSize="{DynamicResource TailleIcone}" Margin="0,0,0,0" Style="{DynamicResource AwesomeFont}" Foreground="{DynamicResource Noir}" Content="{DynamicResource IconeCopier}" />
            </MenuItem.Icon>
        </MenuItem>
    </ContextMenu>
    <!-- Template pour visualiser les communications -->
    <ControlTemplate x:Key="CommunicationVisu" >
        <Grid Name="Contenu" ContextMenu="{StaticResource ContextMenu}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="17" />
            </Grid.ColumnDefinitions>
            <libelles:Libelle Grid.Column="0" Height="20" FontSize="12" HorizontalAlignment="Stretch" Name="txtCode" VerticalAlignment="Stretch" Margin="0,0,0,0" 
                       Content="{Binding Valeur, Mode=OneWay}" IsEnabled="False" Padding="2" DataContext="{Binding}" />
            <libelles:Libelle Visibility="Collapsed" Grid.Column="0" Height="20" FontSize="12" HorizontalAlignment="Stretch" Name="txtLien" VerticalAlignment="Stretch" Margin="0,0,0,0" 
                       Padding="2" DataContext="{Binding}">
                <Hyperlink Name="HyperLink" NavigateUri="{Binding Valeur, Mode=OneWay}">
                    <Run Text="{Binding Valeur, Mode=OneWay}" />
                </Hyperlink>
            </libelles:Libelle>
            <boutons:BoutonIconeContext IsReadOnly="{Binding Path=IsReadOnly}" Grid.Column="1" Name="splitButton" HorizontalAlignment="Right" Width="15" Height="20" VerticalAlignment="Stretch" Margin="2,0,0,0" Command="{Binding OuvertureContextMenu}"  />
        </Grid>
    </ControlTemplate>
Si jamais vous avez une idée, je suis preneur. Si il faut plus d'explication je devrai aussi pouvoir vous en fournir.

Merci

Lookoum