Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ContextMenu not appearing when clicking on 'empty space' within StackPanel

I have a HierarchicalDataTemplate which has some simple Items contained in a horizontal StackPanel. A context menu is assigned to the root StackPanel container as well:

<HierarchicalDataTemplate DataType="{x:Type data:GroupViewModel}"
                              ItemsSource="{Binding Path=Children}">
    <StackPanel Orientation="Horizontal" Margin="2" ContextMenuOpening="groupContextMenuOpening">
        <StackPanel.ContextMenu>
            <StaticResource ResourceKey="groupContextMenu" />
        </StackPanel.ContextMenu>

        <Rectangle Width="16" Height="15" Fill="{Binding Converter={StaticResource HierarchyLevelConverter}}" Margin="0 0 3 0" Cursor="Hand" >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown" >
                    <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding SetCurrent}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>                
        </Rectangle>
        <Image Width="16" Height="15" Source="{Binding Path=GroupState, Converter={StaticResource GroupStateConverter}}" Cursor="Hand" Margin="0 0 3 0">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonDown" >
                    <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding ToggleGroupState}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Image>
    </StackPanel>
</HierarchicalDataTemplate>

The host TreeView also uses a ContextMenu. The idea is that if you right click on an item in the TreeView, you will get it's ContextMenu. If you right clik in empty space in the tree view you will get the 'default' context menu with lesser options.

This is all working expcept one odd problem. As you can see the horizontal StackPanel leaves a margin between the images. If I right click in that space between items, the TreeView context menu shows up. I would expect the ContextMenu defined in my HierarchicalDataTemplate to pop up as i AM right click on the StackPanel itself.

I've found that if I assign a background color to the StackPanel it then works, but I would prefer to avoid this if possible.

Any ideas?

like image 254
santiagoIT Avatar asked Sep 12 '11 16:09

santiagoIT


1 Answers

Set the Background of the StackPanel to Transparent to make it hit test in those empty areas.

like image 188
H.B. Avatar answered Oct 06 '22 08:10

H.B.