У меня есть HierarchicalDataTemplate, в котором есть несколько простых элементов, содержащихся в горизонтальной панели стека.Контекстное меню также назначено корневому контейнеру 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.Если вы щелкните правой кнопкой мыши в пустом месте в древовидном представлении, вы получите контекстное меню «по умолчанию» с меньшими параметрами.
Это все работает, кроме одной странной проблемы.Как вы можете видеть, горизонтальная StackPanel оставляет поле между изображениями.Если я щелкну правой кнопкой мыши в этом пространстве между элементами, появится контекстное меню TreeView.Я ожидал бы, что ContextMenu, определенный в моем HierarchicalDataTemplate, всплывет, когда я щелкаю правой кнопкой мыши по самой StackPanel.
Я обнаружил, что если я назначу цвет фона для StackPanel, то он тогда работает, но я бы предпочелчтобы избежать этого, если это возможно.
Есть идеи?