单击StackPanel中的“空白空间”时,不会出现ContextMenu

时间:2011-09-12 16:38:16

标签: wpf xaml stackpanel

我有一个HierarchicalDataTemplate,其中包含一些水平StackPanel中的简单Items。 上下文菜单也分配给根StackPanel容器:

<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>

主机TreeView也使用ContextMenu。 我们的想法是,如果您右键单击TreeView中的项目,您将获得它的ContextMenu。 如果您在树视图中右侧空白clik,您将获得具有较少选项的“默认”上下文菜单。

这一切都在解决一个奇怪的问题。 如您所见,水平StackPanel在图像之间留下了边距。如果我在项目之间右键单击该空间,则会显示TreeView上下文菜单。我希望我的HierarchicalDataTemplate中定义的ContextMenu会弹出,因为我右键单击了StackPanel本身。

我发现如果我为StackPanel分配背景颜色,那么它可以工作,但如果可能,我宁愿避免这种情况。

有什么想法吗?

1 个答案:

答案 0 :(得分:17)

Background的{​​{1}}设置为StackPanel,以便在这些空白区域进行测试。